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

问题描述 投票:0回答:2

所以,作为 Elixir lang 的新手,我对变量两边的

:
(冒号)感到非常困惑!

:status
是一个原子,但我们也可以在
maps
structs
中找到这样的东西:

%{
   kkey: "success"
 }

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

另一个说明重点的例子:

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

在这个例子中,

label:
被认为是
atom
吗?

此外,在

Keyword List
中是所有键
atoms
?

感谢澄清。谢谢!

elixir
2个回答
5
投票

你的假设是正确的:

%{
  kkey: "success"
}

相当于:

%{
 :kkey => "success"
}

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


4
投票

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"]

实际上是“二元组列表”的简写:

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

很多时候函数中的

options
参数是这样的关键字列表,如果你知道“二元组列表”的现实,那么你可以使用变量/动态键,例如

key = :label
value = "some label"
options = [{key, value}]
IO.inspect(something, options)
© www.soinside.com 2019 - 2024. All rights reserved.