当你需要表示一组常量时,可以使用原子。原子提供了一种类型安全的方式来比较值。原子的定义由它的名字构成,名字前面加一个冒号:
# Atoms start with a ':',
# followed by alphanumeric snake_cased characters
:an_atom
Elixir 标准库中的许多函数会返回一个原子,用来标注结果:
Enum.fetch([1], 0)
# => {:ok, 1}
Enum.fetch([1], 2)
# => :error
在内部,原子由查找表中的一个整数表示,这些整数是自动分配的。这使得比较原子比比较字符串更快。这个内部值无法更改。用用户提供的输入动态创建原子通常被认为是一种反模式。运行时只为数量有限的原子预留了空间,如果原子表已满,在运行时生成新的原子可能会失败。