长生不老药语法词后跟冒号和波浪箭头等
elixir syntax word followed by colon and squiggly arrow and more
更新问题见更新部分
需要一些帮助来理解 Elixir 中的内容。
这是 JavaScript 或 Python 中的 object/map 还是函数?
config :some_api,
something: %{
"user" => "xxx",
"name" => "xxx"
}
config :someStr, Some.Module.Repo, parameters: [somestring: "${USER}-some-str"]
更新
我正在查看 Elixir 文档,但找不到对这些语法的引用。
1)
def myFunc() do
[
{Some.Module, someParam: 1},
{SomeDef, [someParam: someData]}
]
我猜当调用此函数时,它会按顺序执行列表中的所有操作?
2)
def someFunc() do
|>someFunc()
~> someModule.func()
波浪箭头有什么作用?
Elixir 有所谓的 keyword lists,它是 2 元素元组的列表,其中第一个元素(键)是一个原子。
我倾向于将关键字列表视为具有 3 个差异的地图:
- 键必须是原子
- 允许重复键
- 顺序被保留
地图在处理更大的集合时也会提供更快的查找,但我不知道我是否见过足够大的关键字列表来提高地图的效率。
Elixir 也有一个语法,其中 [key: value]
表示 [{:key, :value}]
并且在某些情况下还允许省略括号。
所以你的第一个例子和
一样
config :some_api, [{:something, %{"user" => "xxx", "name" => "xxx"}}]
您最常看到带有函数选项的括号省略。像这样:
IO.inspect(term, label: "some label")
Elixir 是可以省略括号的语言之一(如 Ruby),因此有时当您阅读代码时,您甚至可能没有意识到您正在查看带有参数的函数。 config
就是其中之一。具体来说,您正在查看 Config.config/2
and Config.config/3
.
第一个config
语句:
config :some_api,
something: %{
"user" => "xxx",
"name" => "xxx"
}
其实可以改写为:
config(:some_api, something: %{"user" => "xxx", "name" => "xxx"})
第二个参数用于选项,这是 Elixir 中的常见约定,类似于 Python 中的关键字参数。就像带有可选括号的函数一样,Elixir 中的关键字列表也有可选的括号,所以第二个参数可以写成 [something: %{"user" => "xxx", "name" => "xxx"}]
,或者为了让它更长,你可以写成 [{:something, %{"user" => "xxx", "name" => "xxx"}}]
。 -- 更冗长的语法可能让人头晕目眩,所以您会明白为什么它经常被缩写。
你可以看到一个映射(它是 Elixir 等同于 Python 字典或 Ruby 散列):%{"user" => "xxx", "name" => "xxx"}
——这里的技巧是当键是字符串,它们必须被引用并且你必须使用粗箭头 =>
。如果键是原子,您可以使用缩写语法:%{user: "xxx", name: "xxx"}
第二个配置示例使用 config/3
,因此:
config :someStr, Some.Module.Repo, parameters: [somestring: "${USER}-some-str"]
可以用括号重写为:
config(:someStr, Some.Module.Repo, [parameters: [somestring: "${USER}-some-str"]])
同样,最后一个参数经常用于可选参数(按照惯例命名为 opts
),和以前一样,它是一个关键字列表,经常省略可选括号。
希望这消除了困惑;语法有一些陷阱,但在事情开始变得有意义之前不会太多。
elixir 有很棒的文档。因此,当您偶然发现类似的事情时,您可以打开一个 iex
会话并在那里提出您的疑问。
❯ iex -S mix
Erlang/OTP 23 [erts-11.1.3] [...]
Interactive Elixir (1.11.2) [...]
iex|1 ▶ import Mix.Config
#⇒ Mix.Config
iex|2 ▶ h config
# a ton of information
注意:我盲目调用import Mix.Config
来完全复制你文件中的环境。
更新问题见更新部分
需要一些帮助来理解 Elixir 中的内容。
这是 JavaScript 或 Python 中的 object/map 还是函数?
config :some_api,
something: %{
"user" => "xxx",
"name" => "xxx"
}
config :someStr, Some.Module.Repo, parameters: [somestring: "${USER}-some-str"]
更新
我正在查看 Elixir 文档,但找不到对这些语法的引用。
1)
def myFunc() do
[
{Some.Module, someParam: 1},
{SomeDef, [someParam: someData]}
]
我猜当调用此函数时,它会按顺序执行列表中的所有操作?
2)
def someFunc() do
|>someFunc()
~> someModule.func()
波浪箭头有什么作用?
Elixir 有所谓的 keyword lists,它是 2 元素元组的列表,其中第一个元素(键)是一个原子。
我倾向于将关键字列表视为具有 3 个差异的地图:
- 键必须是原子
- 允许重复键
- 顺序被保留
地图在处理更大的集合时也会提供更快的查找,但我不知道我是否见过足够大的关键字列表来提高地图的效率。
Elixir 也有一个语法,其中 [key: value]
表示 [{:key, :value}]
并且在某些情况下还允许省略括号。
所以你的第一个例子和
一样config :some_api, [{:something, %{"user" => "xxx", "name" => "xxx"}}]
您最常看到带有函数选项的括号省略。像这样:
IO.inspect(term, label: "some label")
Elixir 是可以省略括号的语言之一(如 Ruby),因此有时当您阅读代码时,您甚至可能没有意识到您正在查看带有参数的函数。 config
就是其中之一。具体来说,您正在查看 Config.config/2
and Config.config/3
.
第一个config
语句:
config :some_api,
something: %{
"user" => "xxx",
"name" => "xxx"
}
其实可以改写为:
config(:some_api, something: %{"user" => "xxx", "name" => "xxx"})
第二个参数用于选项,这是 Elixir 中的常见约定,类似于 Python 中的关键字参数。就像带有可选括号的函数一样,Elixir 中的关键字列表也有可选的括号,所以第二个参数可以写成 [something: %{"user" => "xxx", "name" => "xxx"}]
,或者为了让它更长,你可以写成 [{:something, %{"user" => "xxx", "name" => "xxx"}}]
。 -- 更冗长的语法可能让人头晕目眩,所以您会明白为什么它经常被缩写。
你可以看到一个映射(它是 Elixir 等同于 Python 字典或 Ruby 散列):%{"user" => "xxx", "name" => "xxx"}
——这里的技巧是当键是字符串,它们必须被引用并且你必须使用粗箭头 =>
。如果键是原子,您可以使用缩写语法:%{user: "xxx", name: "xxx"}
第二个配置示例使用 config/3
,因此:
config :someStr, Some.Module.Repo, parameters: [somestring: "${USER}-some-str"]
可以用括号重写为:
config(:someStr, Some.Module.Repo, [parameters: [somestring: "${USER}-some-str"]])
同样,最后一个参数经常用于可选参数(按照惯例命名为 opts
),和以前一样,它是一个关键字列表,经常省略可选括号。
希望这消除了困惑;语法有一些陷阱,但在事情开始变得有意义之前不会太多。
elixir 有很棒的文档。因此,当您偶然发现类似的事情时,您可以打开一个 iex
会话并在那里提出您的疑问。
❯ iex -S mix
Erlang/OTP 23 [erts-11.1.3] [...]
Interactive Elixir (1.11.2) [...]
iex|1 ▶ import Mix.Config
#⇒ Mix.Config
iex|2 ▶ h config
# a ton of information
注意:我盲目调用import Mix.Config
来完全复制你文件中的环境。