Erlang原子

示例

原子是具有仅由名称本身标识的名称的对象。

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

  • 以小写字母开头且仅包含字母,数字,下划线或@字符的无引号的字符串,或者

  • 用单引号引起来的字符串

例子

1> hello.
hello

2> hello_world.
hello_world

3> world_Hello@.
world_Hello@

4> '1234'.     
'1234'

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

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

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

  • true和false用于表示相应的布尔值

  • ok 通常用作仅出于效果而调用的函数的返回值,或者用作返回值的一部分,在两种情况下均表示成功执行

  • 以同样的方式error用于表示错误情况,该情况不能保证上层函数尽早返回

  • undefined 通常用作未指定值的占位符

用作标签

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

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

{ok, _} = func(SomeValue).

存储

使用原子时要记住的一件事是,它们被存储在内存中自己的全局表中,并且该表未进行垃圾回收,因此动态创建原子,尤其是在强烈建议用户不影响原子名称的情况下。