當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Elixir Kernel.SpecialForms.%struct{}用法及代碼示例


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-lang.org大神的英文原創作品 Kernel.SpecialForms.%struct{}。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。