原子

原子是一个名称只能由名称本身标识的对象。

原子是在 Erlang 中使用原子文字定义的

  • 一个不带引号的字符串,以小写字母开头,仅包含字母,数字,下划线或 @ 字符,或者
  • 单引号字符串

例子

1> hello.
hello

2> hello_world.
hello_world

3> world_Hello@.
world_Hello@

4> '1234'.     
'1234'

5> '!@#$%% ä'.
'!@#$%% ä'

在大多数 Erlang 程序中使用的原子

几乎每个 Erlang 程序中都会出现一些原子,特别是因为它们在标准库中的使用。

  • truefalse 用于表示相应的布尔值
  • ok 通常用作函数的返回值,该函数仅为其效果调用,或作为返回值的一部分,在两种情况下都表示成功执行
  • 以同样的方式,error 用于表示不保证从上层函数提前返回的错误条件
  • undefined 通常用作未指定值的占位符

用作标签

okerror 经常被用作元组的一部分,其中元组的第一个元素表示成功,而其他元素包含实际的返回值或错误条件:

func(Input) ->
    case Input of
        magic_value ->
            {ok, got_it};
        _ ->
            {error, wrong_one}
    end.

{ok, _} = func(SomeValue).

存储

使用原子时要记住的一件事是它们存储在它们自己的内存中的全局表中,并且这个表不是垃圾收集的,因此动态创建原子,特别是当用户可以影响原子名时,是非常不鼓励的。