长生不老药原子及其不同形式

Elixir Atoms and its different forms

所以,作为Elixir lang的新手,我对变量两边的:(冒号)感到非常困惑!

:status 是一个原子,但我们在 mapsstructs 中也发现了这样的东西:

%{
   kkey: "success"
 }

kkey是原子吗?如果是这样,这与声明原子的标准方式 :kkey 有何不同!

再举一个例子:

IO.inspect(some_variable, label: "value of some_variable")

在此示例中,label: 是否被视为 atom

此外,Keyword List中的所有键都是atoms?

感谢澄清。谢谢!

您的假设是正确的:

%{
  kkey: "success"
}

相当于:

%{
 :kkey => "success"
}

有关关键字列表的详细信息,请阅读 documentation

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

IO.inspect(some_variable, label: "value of some_variable")

你假设 label: 是一个原子是正确的,但在这种情况下它是一个 Keyword 列表作为第二个参数。下面几行都是等价的:

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 中的 Keyword 列表看起来像

[a: 1, b: "yes"]

实际上是 shorthand 对于“二元组列表”:

[{:a, 1}, {:b, "yes"}]

很多时候,函数中的 options 参数是这样的关键字列表,如果您了解“二元组列表”现实,那么您可以使用 variable/dynamic 键,例如

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