Elixir 獲取與更新結(jié)構(gòu)體

2023-12-15 14:51 更新

當(dāng)我們討論映射時,我們展示了如何獲取和更新映射中的領(lǐng)域.對與結(jié)構(gòu)體,還是同樣的技術(shù)(同樣的語法):

iex> john = %User{}
%User{age: 27, name: "John"}
iex> john.name
"John"
iex> meg = %{john | name: "Meg"}
%User{age: 27, name: "Meg"}
iex> %{meg | oops: :field}
** (KeyError) key :oops not found in: %User{age: 27, name: "Meg"}

當(dāng)使用更新符號(|)時,VM會意識到?jīng)]有新的鍵添加到結(jié)構(gòu)體中,同時會允許底層的映射分享它們的結(jié)構(gòu).上述例子中,johnmeg在內(nèi)存中分享著相同的鍵結(jié)構(gòu).

結(jié)構(gòu)體也可用于模式匹配,需要同時匹配特定的鍵值和結(jié)構(gòu)體的類型:

iex> %User{name: name} = john
%User{age: 27, name: "John"}
iex> name
"John"
iex> %User{} = %{}
** (MatchError) no match of right hand side value: %{}


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號