defstruct构造。
defstruct接受原子列表(用于 nil 默认值)或关键字列表(用于指定的默认值)。
defmodule Plane do
defstruct [:engine, wings: 2]
end
plane = %Plane{}
# => %Plane{engine: nil, wings: 2}
大多数能处理映射的函数也能处理结构体。
访问结构体字段时,建议使用_静态访问运算符_ .。
获取/读取字段的值:
plane = %Plane{}
plane.engine
# => nil
Map.fetch(plane, :wings)
# => {:ok, 2}
更新字段的值
plane = %Plane{}
%{plane | wings: 4}
# => %Plane{engine: nil, wings: 4}
@enforce_keys 模块属性会在创建结构体时进行运行期检查,要求指定字段必须被初始化为非nil的值。@enforce_keys后面是一个字段键的列表(这些键是原子)。defmodule User do
@enforce_keys [:username]
defstruct [:username]
end
%User{}
# => (ArgumentError) the following keys must also be given when building struct User: [:username]