为什么错误 - 未定义的函数defstruct

时间:2017-02-02 10:32:58

标签: elixir

我有这个模块,我正在尝试定义一个结构:

defmodule A do
  defmodule B do
    defstruct :id, :name
  end
end

为什么会出错?

undefined function defstruct/2

为什么会出现这个错误?

2 个答案:

答案 0 :(得分:3)

Elixir将defstruct :id, :name解释为使用2个参数调用defstruct,这是undefined function defstruct/2中的 / 2 部分。

您要做的是将单个参数传递给defstruct,即字段名称列表:

defmodule A do
  defmodule B do
    defstruct [:id, :name]
  end
end

答案 1 :(得分:2)

只需检查official documentation即可。

您可以使用不带方括号的表示法,但您必须明确并提供关键字列表。在示例中,提供了默认值。

在你的情况下,:id, :name将不是关键字列表,这就是为什么编译器会抛出一个错误,你将两个参数放在一起。

如果你愿意:

defmodule A do
  defstruct id: nil, name: nil
end

它会完美无缺。

否则使用明确列表。