Elixir编译器给我"未定义的函数更改/ 0"在函数的第三行:
def ignore_empty(changeset) do
cond do
%{valid?: false, changes: changes} = changeset when changes == %{} ->
%{changeset | action: :ignore}
true -> changeset
end
end
为什么?我主要从cast_assoc函数here
的Ecto.Changeset文档中复制此代码答案 0 :(得分:3)
您可能打算使用case
,例如
def ignore_empty(changeset) do
case changeset do
%{valid?: false, changes: changes} = changeset when changes == %{} ->
%{changeset | action: :ignore}
_ ->
changeset
end
end
你得到的原因"未定义的功能"是因为当表达式扩展时,这恰好是编译器遇到的第一个错误。将表达式放在cond
中是有效的,因此除了对未定义函数changes
的引用之外,它将失败的另一件事是使用when
。无论如何,这似乎是问题所在。