Elixir語言中 Kernel.SpecialForms.%struct{} 相關用法介紹如下。
用法:
%struct{}
(宏)
匹配或構建結構。
結構是一個標記的映射,它允許開發人員為鍵提供默認值,標簽用於多態調度和編譯時斷言。
結構通常使用  宏定義:Kernel.defstruct/1 
defmodule User do
  defstruct name: "john", age: 27
end
現在可以按如下方式創建結構:
%User{}
結構下麵隻是一個映射,其中 :__struct__ 鍵指向 User 模塊:
%User{} == %{__struct__: User, name: "john", age: 27}
在構建結構時可以給出結構字段:
%User{age: 31}
#=> %{__struct__: User, name: "john", age: 31}
或者也可以在模式匹配上提取值:
%User{age: age} = user
還可以使用特定於結構的更新操作:
%User{user | age: 28}
結構的優點是它們驗證給定的鍵是定義結構的一部分。下麵的示例將失敗,因為 User 結構中沒有鍵 :full_name:
%User{full_name: "john doe"}
上麵的語法將保證給定的鍵在編譯時是有效的,它會保證在運行時給定的參數是一個結構,否則會以   失敗。BadStructError 
盡管結構是映射,但默認情況下結構不實現為映射實現的任何協議。檢查   以獲取有關如何將結構與協議一起用於多態調度的更多信息。另請參閱Kernel.defprotocol/2   和Kernel.struct/2  ,了解有關如何動態創建和更新結構的示例。Kernel.struct!/2 
結構名稱的模式匹配
除了允許對結構字段進行模式匹配,例如:
%User{age: age} = user
結構還允許對結構名稱進行模式匹配:
%struct_name{} = user
struct_name #=> User
當您想檢查某物是否是結構但您對其名稱不感興趣時,您還可以將結構名稱分配給_:
%_{} = user
相關用法
- Elixir Kernel.SpecialForms.%{}用法及代碼示例
 - Elixir Kernel.SpecialForms.case用法及代碼示例
 - Elixir Kernel.SpecialForms.for用法及代碼示例
 - Elixir Kernel.SpecialForms.quote用法及代碼示例
 - Elixir Kernel.SpecialForms.require用法及代碼示例
 - Elixir Kernel.SpecialForms.&expr用法及代碼示例
 - Elixir Kernel.SpecialForms.<<args>>用法及代碼示例
 - Elixir Kernel.SpecialForms.{args}用法及代碼示例
 - Elixir Kernel.SpecialForms.unquote_splicing用法及代碼示例
 - Elixir Kernel.SpecialForms.receive用法及代碼示例
 - Elixir Kernel.SpecialForms.import用法及代碼示例
 - Elixir Kernel.SpecialForms.left . right用法及代碼示例
 - Elixir Kernel.SpecialForms.alias用法及代碼示例
 - Elixir Kernel.SpecialForms.try用法及代碼示例
 - Elixir Kernel.SpecialForms.fn用法及代碼示例
 - Elixir Kernel.SpecialForms.cond用法及代碼示例
 - Elixir Kernel.SpecialForms.__aliases__用法及代碼示例
 - Elixir Kernel.SpecialForms.left :: right用法及代碼示例
 - Elixir Kernel.SpecialForms.unquote用法及代碼示例
 - Elixir Kernel.SpecialForms.with用法及代碼示例
 - Elixir Kernel.SpecialForms.__block__用法及代碼示例
 - Elixir Kernel.SpecialForms.^var用法及代碼示例
 - Elixir Kernel.round用法及代碼示例
 - Elixir Kernel.left / right用法及代碼示例
 - Elixir Kernel.put_in用法及代碼示例
 
注:本文由純淨天空篩選整理自elixir-lang.org大神的英文原創作品 Kernel.SpecialForms.%struct{}。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。
