Elixir:为什么我会收到 "undefined function" 错误?

Elixir: Why do I get "undefined function" error?

Elixir 编译器在函数的第三行给了我 "undefined function changes/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 文档中复制了这段代码

您可能打算使用 case,例如

def ignore_empty(changeset) do
  case changeset do
    %{valid?: false, changes: changes} = changeset when changes == %{} ->
      %{changeset | action: :ignore}
    _ ->
      changeset
  end
end

你得到 "undefined function" 的原因是因为当表达式被扩展时,这恰好是编译器遇到的第一个错误。将表达式放在 cond 中是有效的,因此除了引用未定义的函数 changes 之外,它会失败的另一件事是使用 when。无论如何,这似乎是这里的问题。