Elixir - 結構體



結構體是在對映的基礎上構建的擴充套件,提供了編譯時檢查和預設值。

定義結構體

要定義結構體,使用 defstruct 結構體 -

defmodule User do
   defstruct name: "John", age: 27
end

與 defstruct 一起使用的關鍵字列表定義了結構體將具有的欄位以及它們的預設值。結構體採用定義它們的模組的名稱。在上面給出的示例中,我們定義了一個名為 User 的結構體。我們現在可以使用類似於建立對映的語法來建立 User 結構體 -

new_john = %User{})
ayush = %User{name: "Ayush", age: 20}
megan = %User{name: "Megan"})

以上程式碼將生成三個具有以下值的不同的結構體 -

%User{age: 27, name: "John"}
%User{age: 20, name: "Ayush"}
%User{age: 27, name: "Megan"}

結構體提供編譯時保證,只有透過 defstruct 定義的欄位(以及所有欄位)才允許存在於結構體中。因此,一旦在模組中建立了結構體,就不能定義自己的欄位。

訪問和更新結構體

當我們討論對映時,我們展示瞭如何訪問和更新對映的欄位。相同的技術(以及相同的語法)也適用於結構體。例如,如果我們想更新我們在前面示例中建立的使用者,那麼 -

defmodule User do
   defstruct name: "John", age: 27
end
john = %User{}
#john right now is: %User{age: 27, name: "John"}

#To access name and age of John, 
IO.puts(john.name)
IO.puts(john.age)

當執行上述程式時,它會產生以下結果 -

John
27

要更新結構體中的值,我們將再次使用在對映章節中使用的相同過程,

meg = %{john | name: "Meg"}

結構體也可以用於模式匹配,既可以匹配特定鍵的值,也可以確保匹配值與匹配值型別相同的結構體。

廣告

© . All rights reserved.