Elixir語言中 Access
相關用法介紹如下。
基於鍵的數據結構訪問。
模塊定義了一種行為,用於通過 Access
data[key]
語法動態訪問數據結構中任何類型的鍵。
支持開箱即用的關鍵字列表 (Access
) 和Map (Keyword
)。關鍵字僅支持原子鍵,映射的鍵可以是任何類型。如果 key 不存在,兩者都返回Map
nil
:
iex> keywords = [a: 1, b: 2]
iex> keywords[:a]
1
iex> keywords[:c]
nil
iex> map = %{a: 1, b: 2}
iex> map[:a]
1
iex> star_ratings = %{1.0 => "★", 1.5 => "★☆", 2.0 => "★★"}
iex> star_ratings[1.5]
"★☆"
這種語法非常方便,因為它可以任意嵌套:
iex> keywords = [a: 1, b: 2]
iex> keywords[:c][:unknown]
nil
這是有效的,因為訪問 nil
值上的任何內容都會返回 nil
本身:
iex> nil[:a]
nil
訪問語法也可以與
、 Kernel.put_in/2
和 Kernel.update_in/2
宏一起使用,以允許在嵌套數據結構中設置值:Kernel.get_and_update_in/2
iex> users = %{"john" => %{age: 27}, "meg" => %{age: 23}}
iex> put_in(users["john"][:age], 28)
%{"john" => %{age: 28}, "meg" => %{age: 23}}
注意力!雖然通過 map[key]
在映射中允許訪問語法,但如果您的映射由預定義的原子鍵組成,您應該更喜歡使用 map.key
而不是 map[key]
訪問這些原子鍵,因為如果鍵會引發 map.key
丟失(如果鍵是預定義的,則不應該發生這種情況)。同樣,由於結構是映射並且結構具有預定義的鍵,因此它們隻允許 struct.key
語法,並且不允許 struct[key]
訪問語法。有關詳細信息,請參閱
模塊。Map
嵌套數據結構
這兩種基於鍵的訪問語法都可以與
中的嵌套更新函數和宏一起使用,例如 Kernel
、 Kernel.get_in/2
、 Kernel.put_in/3
、 Kernel.update_in/3
和 Kernel.pop_in/2
。Kernel.get_and_update_in/3
例如,要更新另一個Map中的Map:
iex> users = %{"john" => %{age: 27}, "meg" => %{age: 23}}
iex> put_in(users["john"].age, 28)
%{"john" => %{age: 28}, "meg" => %{age: 23}}
該模塊提供了用於遍曆其他結構(如元組和列表)的便利函數。這些函數可用於所有與
相關的函數和 Access
中的宏。Kernel
例如,給定一個帶有 :name
和 :languages
鍵的用戶映射,下麵是如何深入遍曆映射並將所有語言名稱轉換為大寫:
iex> languages = [
...> %{name: "elixir", type: :functional},
...> %{name: "c", type: :procedural}
...> ]
iex> user = %{name: "john", languages: languages}
iex> update_in(user, [:languages, Access.all(), :name], &String.upcase/1)
%{
name: "john",
languages: [
%{name: "ELIXIR", type: :functional},
%{name: "C", type: :procedural}
]
}
相關用法
- Elixir Access.filter用法及代碼示例
- Elixir Access.all用法及代碼示例
- Elixir Access.key用法及代碼示例
- Elixir Access.get用法及代碼示例
- Elixir Access.key!用法及代碼示例
- Elixir Access.fetch用法及代碼示例
- Elixir Access.at!用法及代碼示例
- Elixir Access.at用法及代碼示例
- Elixir Access.fetch!用法及代碼示例
- Elixir Access.elem用法及代碼示例
- Elixir Access.pop用法及代碼示例
- Elixir Access.get_and_update用法及代碼示例
- Elixir Application.get_env用法及代碼示例
- Elixir Application用法及代碼示例
- Elixir Agent.get_and_update用法及代碼示例
- Elixir Atom用法及代碼示例
- Elixir Atom.to_string用法及代碼示例
- Elixir Agent.get用法及代碼示例
- Elixir Atom.to_charlist用法及代碼示例
- Elixir Agent.cast用法及代碼示例
- Elixir Agent.start_link用法及代碼示例
- Elixir Agent.update用法及代碼示例
- Elixir Agent.stop用法及代碼示例
- Elixir Application.ensure_started用法及代碼示例
- Elixir Agent.start用法及代碼示例
注:本文由純淨天空篩選整理自elixir-lang.org大神的英文原創作品 Access。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。