我有这个模块,我正在尝试定义一个结构:
defmodule A do
defmodule B do
defstruct :id, :name
end
end
为什么会出错?
undefined function defstruct/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
它会完美无缺。
否则使用明确列表。