Compiler errors 长生不老药:为什么我会得到;“未定义函数”;错误?
Elixir编译器在函数的第三行给出了“undefined function changes/0”:Compiler errors 长生不老药:为什么我会得到;“未定义函数”;错误?,compiler-errors,elixir,ecto,Compiler Errors,Elixir,Ecto,Elixir编译器在函数的第三行给出了“undefined function changes/0”: def ignore_empty(changeset) do cond do %{valid?: false, changes: changes} = changeset when changes == %{} -> %{changeset | action: :ignore} true -> changeset en
def ignore_empty(changeset) do
cond do
%{valid?: false, changes: changes} = changeset when changes == %{} ->
%{changeset | action: :ignore}
true -> changeset
end
end
为什么呢?我主要是从cast_assoc函数的exto.Changeset文档中复制了这段代码您可能打算使用
case
,例如
def ignore_empty(changeset) do
case changeset do
%{valid?: false, changes: changes} = changeset when changes == %{} ->
%{changeset | action: :ignore}
_ ->
changeset
end
end
得到“undefined function”的原因是,当表达式展开时,这恰好是编译器遇到的第一个错误。将表达式放在
条件下是有效的,因此除了对未定义函数的引用发生更改之外,另一件它将失败的事情是在时使用。无论如何,这似乎是这里的问题。您可能打算使用case
,例如
def ignore_empty(changeset) do
case changeset do
%{valid?: false, changes: changes} = changeset when changes == %{} ->
%{changeset | action: :ignore}
_ ->
changeset
end
end
得到“undefined function”的原因是,当表达式展开时,这恰好是编译器遇到的第一个错误。将表达式放在条件下是有效的,因此除了对未定义函数的引用发生更改之外,另一件它将失败的事情是在时使用。无论如何,这似乎是这里的问题。谢谢,比特沃克,你说得对,我很困惑,因为在文档中,case表达式的changeset参数通过了管道操作符,我认为有一个cond表达式,这是我的错。谢谢,比特沃克,你说得对,我感到困惑,因为在文档中,case表达式的changeset参数通过管道操作符,我认为有一个cond表达式,我的错误。