Elixir:为什么我得到"未定义的功能"错误?

时间:2017-09-09 06:26:05

标签: compiler-errors elixir ecto

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文档中复制此代码

1 个答案:

答案 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。无论如何,这似乎是问题所在。