当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。