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


Elixir Keyword用法及代碼示例


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-lang.org大神的英文原創作品 Keyword。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。