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]