长生不老药原子及其不同形式
Elixir Atoms and its different forms
所以,作为Elixir lang的新手,我对变量两边的:
(冒号)感到非常困惑!
:status
是一个原子,但我们在 maps
或 structs
中也发现了这样的东西:
%{
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)
所以,作为Elixir lang的新手,我对变量两边的:
(冒号)感到非常困惑!
:status
是一个原子,但我们在 maps
或 structs
中也发现了这样的东西:
%{
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)