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{}。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。