Login Elixir--包含多个子句的编译错误定义--

Login Elixir--包含多个子句的编译错误定义--,login,compilation,elixir,Login,Compilation,Elixir,我试图在elixir中登录,但当我输入以下代码时: def changeset(model, params \\ :empty) do model |> cast(params, ~w(email), []) |> validate_format(:email, ~r/@/) end 我不断地发现这个错误: == Compilation error on file web/models/user.ex == ** (CompileError) web/models

我试图在elixir中登录,但当我输入以下代码时:

def changeset(model, params \\ :empty) do
   model
   |> cast(params, ~w(email), [])
   |> validate_format(:email, ~r/@/)
end
我不断地发现这个错误:

== Compilation error on file web/models/user.ex ==
** (CompileError) web/models/user.ex:25: 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 changeset/2 has multiple clauses and defines defaults in one or more clauses
web/models/user.ex:25: (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

我知道我必须放一个标题,但我不知道如何修复它,任何人都可以解释一下吗?

您的代码可能如下所示:

def changeset(model, params \\ :empty) do
   # ...
end

def changeset(model, %{"some" => value}) do
   # ...
end
Elixir对此表示不满,因为有多个带有默认值的子句可能会导致歧义。为了防止在语法级别出现这种情况,Elixir强制使用单独的函数头作为默认值

如错误消息所示,您需要添加一个单独的函数头来定义默认值,然后编写其他没有默认值的子句:

# This is a function header, whose only purpose is to set
# default values that apply to all subsequent clauses
def changeset(model, params \\ :empty)

def changeset(model, params) do
   # ...
end

def changeset(model, %{"some" => value}) do
   # ...
end

您的代码可能如下所示:

def changeset(model, params \\ :empty) do
   # ...
end

def changeset(model, %{"some" => value}) do
   # ...
end
Elixir对此表示不满,因为有多个带有默认值的子句可能会导致歧义。为了防止在语法级别出现这种情况,Elixir强制使用单独的函数头作为默认值

如错误消息所示,您需要添加一个单独的函数头来定义默认值,然后编写其他没有默认值的子句:

# This is a function header, whose only purpose is to set
# default values that apply to all subsequent clauses
def changeset(model, params \\ :empty)

def changeset(model, params) do
   # ...
end

def changeset(model, %{"some" => value}) do
   # ...
end

你能把那份文件的其余部分寄出去吗?看起来您正在定义
变更集/2
两次。您可以发布该文件的其余部分吗?看起来您正在定义
变更集/2
两次。