非常教程

Erlang 20参考手册

stdlib

proplists

模块

proplists

模块摘要

属性列表的支持功能。

描述

属性列表是普通列表,其中包含元组形式的条目,元素的第一个元素是用于查找和插入的键,或者是元组的缩写{Atom, true}。(在列表中允许使用其他项,但被模块忽略。)如果某个键的列表中有多个条目,则第一个匹配项通常会在后面覆盖(不考虑元组的元素)。

属性列表对于表示继承的属性很有用,例如传递给函数的选项,用户可以指定覆盖默认设置,对象属性,注释等的选项。

如果两个键匹配(=:=),则认为它们相等。也就是说,数字进行比较字面上而不是通过值,以便,例如,11.0是不同的密钥。

数据类型

property() = atom() | tuple()

出口

append_values(Key, ListIn) -> ListOut

类型

get_all_values/2类似,但每个值都包含在列表中,除非它本身已经是一个列表。列表的结果列表被连接在一起。这对于“增量”选项通常很有用。

例子:

append_values(a, [{a, [1,2]}, {b, 0}, {a, 3}, {c, -1}, {a, [4]}])

返回:

[1,2,3,4]

compact(ListIn) -> ListOut

类型

最小化列表中所有条目的表示。这相当于[property(P) || P <- ListIn]

另见property/1unfold/1

delete(Key, List) -> List

类型

删除与相关联的所有条目KeyList

expand(Expansions, ListIn) -> ListOut

类型

将特定属性扩展为相应的一组属性(或其他术语)。对于每一对{Property, Expansion}Expansions:如果E是在所述第一条目ListIn与所述相同的密钥Property,和EProperty具有相当的标准型的形式,然后E被替换为术语Expansion,并且使用相同的密钥的任何条目从删除ListIn

例如,以下表达式全部返回[fie, bar, baz, fum]

expand([{foo, [bar, baz]}], [fie, foo, fum])
expand([{{foo, true}, [bar, baz]}], [fie, foo, fum])
expand([{{foo, false}, [bar, baz]}], [fie, {foo, false}, fum])

但是,以下调用不会进行扩展,因为{foo, false}阴影foo

expand([{{foo, true}, [bar, baz]}], [{foo, false}, fie, foo, fum])

注意,如果要在展开时将原始属性项保存在结果中,则必须将其包括在展开列表中。插入的术语不会递归展开。如果Expansions包含多个具有相同键的属性,只使用第一个匹配项。

另见normalize/2

get_all_values(Key, List) -> term()

类型

类似get_value/2,但返回值的列表中的所有条目{Key, Value}List。如果不存在这样的条目,则结果是空列表。

get_bool(Key, List) -> boolean()

类型

返回布尔键/值选项的值。如果lookup(Key, List)将产生{Key, true},则此函数返回true,否则返回false

另见get_value/2lookup/2

get_keys(List) -> term()

类型

返回List不包含重复项的无序键列表。

get_value(Key, List) -> term()

类型

相当于get_value(Key, List, undefined)

get_value(Key, List, Default) -> term()

类型

返回一个简单的键/值属性的值List。如果lookup(Key, List)会屈服{Key, Value},则该函数返回相应的Value,否则Default

又见get_all_values/2get_bool/2get_value/2lookup/2

is_defined(Key, List) -> boolean()

类型

返回true如果List包含相关的至少一个条目Key,否则false

lookup(Key, List) -> none | tuple()

类型

返回与Keyin 关联的第一个条目List(如果存在),否则返回none。对于A列表中的原子,元组{A, true}是与之相关的条目A

又见get_bool/2get_value/2lookup_all/2

lookup_all(Key, List) -> tuple()

类型

返回与Keyin 关联的所有条目的列表List。如果不存在这样的条目,则结果是空列表。

另见lookup/2

normalize(ListIn, Stages) -> ListOut

类型

传递ListIn通过取代/膨胀级的序列。对于aliases操作,substitute_aliases/2使用指定的别名列表应用函数:

  • 对于negations操作,substitute_negations/2使用指定的否定列表应用。
  • 对于expand操作,expand/2使用指定的扩展列表应用函数。

最终结果会自动压缩(比较compact/1)。

通常,您想先替换否定,然后替换别名,然后执行一个或多个扩展(有时候您希望在进行主扩展之前预先扩展特定条目)。您可能需要重复替换否定和/或别名,以便在别名和扩展名单的右侧允许使用这些表单。

另见substitute_negations/2

property(PropertyIn) -> PropertyOut

类型

创建一个属性的正常形式(最小)表示形式。如果PropertyIn{Key, true}Key原子的Key位置返回,否则返回整个术语PropertyIn

另见property/2

property(Key, Value) -> Property

类型

创建一个简单的键/值属性的正常形式(最小)表示形式。返回Key如果ValuetrueKey是一个原子,否则一个元组{Key, Value}被返回。

另见property/1

split(List, Keys) -> {Lists, Rest}

类型

分区List成子列表和余数的列表。按照相应的顺序Lists包含每个键的一个子列表Keys。每个子列表中元素的相对顺序都是从原始文件中保留下来的ListRest包含List不与任何指定键相关联的元素,也保留其原始相对顺序。

例子:

split([{c, 2}, {e, 1}, a, {c, 3, 4}, d, {b, 5}, b], [a, b, c])

返回:

{[[a], [{b, 5}, b],[{c, 2}, {c, 3, 4}]], [{e, 1}, d]}

substitute_aliases(Aliases, ListIn) -> ListOut

类型

替换属性的键。对于每个条目ListIn,如果它与一些重要关联K1,从而{K1, K2}发生Aliases,进入的关键是改变K2。如果同K1一次出现的次数超过一次Aliases,则仅使用第一次出现的次数。

例如,substitute_aliases([{color, colour}], L)替换所有元组{color, ...}L{colour, ...},和所有原子color具有colour

另见normalize/2substitute_negations/2

substitute_negations(Negations, ListIn) -> ListOut

类型

替换布尔值属性的键并同时取消它们的值。对于每个条目ListIn,如果它与某些关键字相关联K1,则{K1, K2}发生在Negations:如果该条目是{K1, true},则将其替换为{K2, false},否则替换为{K2, true},从而更改选项的名称,同时否定由其指定的值get_bool(Key,ListIn)。如果同K1一次出现的次数超过一次Negations,则仅使用第一次出现的次数。

例如,substitute_negations([{no_foo, foo}], L)替换任何原子no_foo或元组{no_foo, true}L{foo, false}和任何其它元组{no_foo, ...}{foo, true}

又见get_bool/2normalize/2substitute_aliases/2

unfold(ListIn) -> ListOut

类型

将所有出现的原子展开ListIn为元组{Atom, true}

Erlang 20

Erlang 是一种通用的面向并发的编程语言,可应付大规模开发活动的程序设计语言和运行环境。

主页 https://www.erlang.org/
源码 https://github.com/erlang/otp
版本 20
发布版本 20.1