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


Elixir Access用法及代碼示例


Elixir語言中 Access 相關用法介紹如下。

基於鍵的數據結構訪問。

Access 模塊定義了一種行為,用於通過 data[key] 語法動態訪問數據結構中任何類型的鍵。

Access 支持開箱即用的關鍵字列表 ( Keyword ) 和Map ( Map )。關鍵字僅支持原子鍵,映射的鍵可以是任何類型。如果 key 不存在,兩者都返回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}
  ]
}

請參閱函數 key/1 key!/1 elem/1 all/0 以了解一些可用的訪問器。

相關用法


注:本文由純淨天空篩選整理自elixir-lang.org大神的英文原創作品 Access。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。