Erlang 编程/术语
在 Erlang 中表达值的**基本单位**是**术语**。术语由 Erlang 的简单类型或复杂类型组成。
整数常量写为数字,可选地以基数和井号 (#
) 为前缀
1> 2. 2 2> 16#ff. 255 3> 2#1011. 11
Erlang 使用任意精度的整数,支持任意位数的整数。
Erlang 还提供另一个语法快捷方式:可以将整数写为美元符号 ($
) 和一个字符,其值为该字符的 ASCII 值。这在处理字符串时很有用,因为字符串通常在 Erlang 中表示为整数列表(参见下面的 字符串)。
浮点数(浮点数字)写为带小数点的数字,可选地带有一个用字母 e
与数字分隔的指数。
4> 1.2. 1.20000 5> 1.0. 1.00000 6> 2.0e-4. 2.00000e-4
原子是命名的常量。原子以小写字母开头,可以包含字母、数字和下划线 (_
);或者用单引号 ('
) 括起来。
1> ok. ok 2> 'OKAY'. 'OKAY' 3> this_is_an_atom. this_is_an_atom
特殊原子 true 和 false 表示布尔值。
原子通常用作键值对中的键,成功和失败的指示器(例如 ok 和 error),以及识别复杂结构的一部分以进行 模式匹配。
元组是由多个值组成的术语,长度固定。元组用大括号 ({
和 }
) 括起来,元组的元素(任何 Erlang 术语,包括元组)用逗号分隔。
1> {ok, 9}. {ok,9} 2> {true, {127, 0, 0, 1}}. {true,{127,0,0,1}} 3> {box, {width, 10}, {height, 35}}. {box, {width, 10}, {height, 35}}
第三个例子展示了所谓的标记元组。在可能的情况下使用标记元组,因为它们清楚地表明了元组的用途。稍后,我们将研究记录,这只是标记元组的简写。
列表是由多个值组成的术语,长度可变。列表用方括号 ([
和 ]
) 括起来,列表的每个成员(任何 Erlang 术语,包括列表)用逗号分隔。
列表也可以由头部和尾部组成,用竖线字符 (|
) 分隔:[Head|Tail]
。尾部可以是任何有效的 Erlang 术语,但通常是表示头部之后列表成员的列表。
1> [one, two, three]. [one,two,three] 2> [1, 2|[3, 4, 5]]. [1,2,3,4,5] 3> [{key1, value1}, {key2, value2}]. [{key1,value1},{key2,value2}]
尾部是最小的空列表 ([]) 的列表被称为良构列表。
Erlang 没有单独的字符串类型。字符串通常由整数列表表示(标准库的 string 模块操作这些列表)。每个整数代表字符串中字符的 ASCII(或其他字符集编码)值。为了方便起见,用双引号 ("
) 括起来的字符序列等效于这些字符的数值列表。
1> "one". "one" 2> [$o, $n, $e]. "one" 3> $o. 111 4> $n. 110 5> $e. 101 6> [111, 110, 101]. "one"
Erlang shell 会“猜测”给定的列表是否是可打印字符串,并为了方便将其打印出来。
Pid 或进程标识符是 Erlang 中的一种特殊类型。要查看 Pid 的样子,可以使用 self() 获取自身的 Pid。
1> self(). <0.29.0>
引用(或引用)是一个术语,即使在 Erlang 节点之间也是唯一的。可以通过调用 erlang:make_ref() 创建新的引用。引用仅用作唯一的标签或标识符。Erlang 引用不应与 C/C++ 中的引用混淆。
2> erlang:make_ref(). #Ref<0.0.0.41>
Erlang 还有其他类型,例如函数(闭包)、比特串、二进制(任意数据的连续块)和端口(端口标识符),将在其相应的章节中介绍。