跳转到内容

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

特殊原子 truefalse 表示布尔值。

原子通常用作键值对中的键,成功和失败的指示器(例如 okerror),以及识别复杂结构的一部分以进行 模式匹配

元组是由多个值组成的术语,长度固定。元组用大括号 ({}) 括起来,元组的元素(任何 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 会“猜测”给定的列表是否是可打印字符串,并为了方便将其打印出来。

进程标识符 (Pids)

[编辑 | 编辑源代码]

Pid 或进程标识符是 Erlang 中的一种特殊类型。要查看 Pid 的样子,可以使用 self() 获取自身的 Pid。

1> self().
  <0.29.0>

引用 (Refs)

[编辑 | 编辑源代码]

引用(或引用)是一个术语,即使在 Erlang 节点之间也是唯一的。可以通过调用 erlang:make_ref() 创建新的引用。引用仅用作唯一的标签或标识符。Erlang 引用不应与 C/C++ 中的引用混淆。

2> erlang:make_ref().
#Ref<0.0.0.41>

其他类型

[编辑 | 编辑源代码]

Erlang 还有其他类型,例如函数(闭包)、比特串、二进制(任意数据的连续块)和端口(端口标识符),将在其相应的章节中介绍。

华夏公益教科书