我得到"Elixir编译错误:具有多个子句和默认值的定义需要一个头“。用于下面的函数。我不清楚为什么我会得到这个错误?对如何解决这个问题有什么建议吗?
def stream(query, opts \\ []) do
initial_key = Keyword.get(opts, :initial_key, 0)
key_name = Keyword.get(opts, :key_name, :id)
chunk_size = Keyword.get(opts, :chunk_size, 500)
Stream.resource(fn -> {query, initial_key} end,
fn {query, last_seen_key} ->
results = query
|> Ecto.Query.where([r], field(r, ^key_name) > ^last_seen_key)
|> Ecto.Query.limit(^chunk_size)
|> __ENV__.module.all
case List.last(results) do
%{^key_name => last_key} ->
{results, {query, last_key}}
nil ->
{:halt, {query, last_seen_key}}
end
end,
fn _ -> [] end)
end
错误消息:
== Compilation error on file lib/peanutbutter/repo.ex ==
** (CompileError) lib/peanutbutter/repo.ex:3: definitions with multiple clauses and default values require a header. Instead of:
def foo(:first_clause, b \\ :default) do ... end
def foo(:second_clause, b) do ... end
one should write:
def foo(a, b \\ :default)
def foo(:first_clause, b) do ... end
def foo(:second_clause, b) do ... end
def stream/2 has multiple clauses and defines defaults in one or more clauses
lib/peanutbutter/repo.ex:3: (module)
(stdlib) erl_eval.erl:670: :erl_eval.do_apply/6
(elixir) lib/kernel/parallel_compiler.ex:117: anonymous fn/4 in Kernel.ParallelCompiler.spawn_compilers/1
https://stackoverflow.com/questions/44573608
复制相似问题