原子

原子是一個名稱只能由名稱本身標識的物件。

原子是在 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).

儲存

使用原子時要記住的一件事是它們儲存在它們自己的記憶體中的全域性表中,並且這個表不是垃圾收集的,因此動態建立原子,特別是當使用者可以影響原子名時,是非常不鼓勵的。