在Elixir中,我们何时在原子名称之前或之后使用冒号?

And*_*ndy 5 elixir

我正在忙着学习Elixir,并了解什么是原子.在基本类型页面上,他们是这样介绍的:

:foo
Run Code Online (Sandbox Code Playgroud)

但是,当我们遇到关键字列表时,我们会看到这样的原子

list = [{:a, 1}, {:b, 2}]   # list of tuples
list == [a: 1, b: 2]        # evaluates as true
Run Code Online (Sandbox Code Playgroud)

已经交换了冒号的位置以显示在原子名称之后.

似乎当原子是关键时,结肠的位置会发生变化.这确实使代码更易于阅读,因为它非常富有表现力,但我找不到任何直接引用为什么会出现这种情况(这不是我正在研究Elixir的唯一网站).

有人可以确认我是正确的,假设当它们是列表中的关键时,原子将冒号放在右边吗?

对我而言,这只会使代码更漂亮,但实际上是否有一些更深刻的理解,我不知道为什么会发生这种情况?

Pat*_*ity 10

是的,它只是原子键的语法糖.它可能是因为原子被广泛用作关键字列表和地图中的键,而较短的语法使它们更容易阅读.正如您已经正确观察到的,以下的支持者是等价的:

[{:a, 1}, {:b, 2}]
[a:1, b:2]
Run Code Online (Sandbox Code Playgroud)

以下地图也是等效的:

%{:a => 1, :b => 2}
%{a: 1, b: 2}
Run Code Online (Sandbox Code Playgroud)