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