Elixir 长生不老药原子及其不同形态

Elixir 长生不老药原子及其不同形态,elixir,Elixir,因此,作为Elixir lang的新手,我对变量两边的:(冒号)完全感到困惑 :status是一个原子,但我们也可以在映射或结构之类的东西中找到: %{ kkey: "success" } kkey是原子吗?如果是这样的话,这与声明atom的标准方式有什么不同 另一个说明这一点的示例: IO.inspect(some_variable, label: "value of some_variable") 在本例中,label:是否被视为atom

因此,作为Elixir lang的新手,我对变量两边的
(冒号)完全感到困惑

:status
是一个原子,但我们也可以在
映射
结构
之类的东西中找到:

%{
   kkey: "success"
 }
kkey
是原子吗?如果是这样的话,这与声明atom的标准方式有什么不同

另一个说明这一点的示例:

IO.inspect(some_variable, label: "value of some_variable")
在本例中,
label:
是否被视为
atom

此外,在
关键字列表
中,是否所有键都是
原子


请澄清。谢谢

您的假设是正确的:

%{
  kkey: "success"
}
相当于:

%{
 :kkey => "success"
}

有关关键字列表的更多信息,请阅读。

zwippie的答案是正确的。我想补充一点。您提到了IO.inspect,例如

IO.inspect(some_variable, label: "value of some_variable")
您可以正确地假设
标签:
是一个原子,但在本例中,作为第二个参数,它是一个
关键字
列表。以下各行都是等效的:

IO.inspect(some_variable, label: "value of some_variable")
IO.inspect(some_variable, [label: "value of some_variable"])
IO.inspect(some_variable, [{:label, "value of some_variable"}])
所以Elixir中的
关键字
列表

[a: 1, b: "yes"]
实际上是“2元组列表”的简写:

很多时候,函数中的
options
参数是这样的关键字列表,如果您了解“2元组列表”的实际情况,则可以使用变量/动态键,例如

key = :label
value = "some label"
options = [{key, value}]
IO.inspect(something, options)

这类似于Ruby,一开始肯定会让人困惑,但过了一会儿,我接受了和平詹姆斯的答案,因为它有更多的信息。不用说,zwippie的回答也是正确的,同样值得赞赏。感谢亚历山大也为你的想法。我不知道我如何@users在这里堆栈溢出!!
key = :label
value = "some label"
options = [{key, value}]
IO.inspect(something, options)