【发布时间】:2017-06-16 23:10:30
【问题描述】:
我已经像这样定义了一个Foo 模块:
defmodule Foo do
def hello(x = %{name: name}) do
IO.inspect [x, name]
end
end
如果我运行Foo.hello(%{name: "Alice"}),我会得到以下结果:
[%{name: "Alice"}, "Alice"]
然后,我了解到我可以重写 Foo 模块,而无需像这样更改其功能:
defmodule Foo do
def hello(%{name: name} = x) do
IO.inspect [x, name]
end
end
为什么会这样?函数参数中的等号是什么?是普通的匹配算子吗?
据我了解,运算符= 将右侧的值与左侧的模式匹配。
[编辑]
在阅读了贾斯汀的回答后,我自己发布了一个答案。但是,我仍然需要帮助。
我想知道= 运算符在函数头中的行为是否有所不同以及原因。
如果有的话,我想找一份官方文档。
【问题讨论】:
-
我只是为了确保我们与您在
In my understanding...之后所说的内容一致,并让阅读您的问题的任何人都更清楚:使用模式匹配,Elixir 总是试图让左侧与右侧相同。 Elixir 只会更改匹配运算符左侧的变量的值。
标签: elixir