Elixir語言中 Keyword
相關用法介紹如下。
關鍵字列表是一個完全由兩個元素元組組成的列表。
這些元組的第一個元素稱為 key
,它必須是一個原子。第二個元素,稱為 value
,可以是任何術語。
關鍵字主要用於處理可選值。
例子
例如,以下是關鍵字列表:
[{:exit_on_close, true}, {:active, :once}, {:packet_size, 1024}]
Elixir 為關鍵字列表提供了一種特殊且更簡潔的語法:
[exit_on_close: true, active: :once, packet_size: 1024]
這兩種語法返回完全相同的值。
key
可以是任何原子,由 Unicode 字母、數字、下劃線或 @
符號組成。如果 key
應該包含任何其他字符,例如空格,則可以將其括在引號中:
iex> ["exit on close": true]
["exit on close": true]
將原子用引號括起來不會使其成為字符串。關鍵字列表keys
始終是原子。引號隻能在必要時使用,否則 Elixir 會發出警告。
重複鍵和排序
關鍵字可能有重複的鍵,因此它不是嚴格的鍵值數據類型。但是,此模塊中的大多數函數都適用於鍵值結構,並且其行為類似於您在
模塊中可以找到的函數。例如,Map
將獲得與給定鍵匹配的第一個條目,無論是否存在重複條目。同樣,Keyword.get/3
和 Keyword.put/3
確保在調用時刪除給定鍵的所有重複條目。但是請注意,關鍵字列表操作需要遍曆整個列表才能找到鍵,因此這些操作比映射對應的操作要慢。Keyword.delete/2
存在一些處理重複鍵的函數,例如,
返回給定鍵的所有值,而get_values/2
僅刪除現有鍵的第一個條目。delete_first/2
即使列表保留現有順序,
中的函數也不保證任何順序。例如,如果您調用 Keyword
Keyword.put(opts, new_key, new_value)
,則無法保證將添加 new_key
的位置(前麵、結尾或其他任何地方)。
鑒於無法保證排序,也不建議對關鍵字列表進行模式匹配。例如,一個函數,例如:
def my_function([some_key: value, another_key: another_value])
將匹配
my_function([some_key: :foo, another_key: :bar])
但它不匹配
my_function([another_key: :bar, some_key: :foo])
該模塊中的大多數函數都在線性時間內工作。這意味著執行操作所需的時間以與列表長度相同的速度增長。
調用語法
當關鍵字列表作為函數的最後一個參數傳遞時,關鍵字列表周圍的方括號可以省略。例如,關鍵字列表語法:
String.split("1-0", "-", [trim: true, parts: 2])
隻要它是函數調用的最後一個參數,就可以不用括號括起來:
String.split("1-0", "-", trim: true, parts: 2)
由於元組、列表和映射在 Elixir 語法中的處理方式與函數參數類似,因此它們也可以使用此屬性:
iex> {1, 2, foo: :bar}
{1, 2, [{:foo, :bar}]}
iex> [1, 2, foo: :bar]
[1, 2, {:foo, :bar}]
iex> %{1 => 2, foo: :bar}
%{1 => 2, :foo => :bar}
相關用法
- Elixir Keyword.get用法及代碼示例
- Elixir Keyword.validate用法及代碼示例
- Elixir Keyword.get_and_update用法及代碼示例
- Elixir Keyword.get_and_update!用法及代碼示例
- Elixir Keyword.pop_first用法及代碼示例
- Elixir Keyword.get_values用法及代碼示例
- Elixir Keyword.replace用法及代碼示例
- Elixir Keyword.fetch用法及代碼示例
- Elixir Keyword.split用法及代碼示例
- Elixir Keyword.put_new用法及代碼示例
- Elixir Keyword.pop_values用法及代碼示例
- Elixir Keyword.drop用法及代碼示例
- Elixir Keyword.keyword?用法及代碼示例
- Elixir Keyword.pop_lazy用法及代碼示例
- Elixir Keyword.to_list用法及代碼示例
- Elixir Keyword.merge用法及代碼示例
- Elixir Keyword.put用法及代碼示例
- Elixir Keyword.get_lazy用法及代碼示例
- Elixir Keyword.values用法及代碼示例
- Elixir Keyword.filter用法及代碼示例
- Elixir Keyword.has_key?用法及代碼示例
- Elixir Keyword.replace!用法及代碼示例
- Elixir Keyword.delete用法及代碼示例
- Elixir Keyword.take用法及代碼示例
- Elixir Keyword.delete_first用法及代碼示例
注:本文由純淨天空篩選整理自elixir-lang.org大神的英文原創作品 Keyword。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。