Elixir中函数参数中的等号是什么?

Tsu*_*omu 6 elixir

我已经定义了Foo这样一个模块:

defmodule Foo do
  def hello(x = %{name: name}) do
    IO.inspect [x, name]
  end
end
Run Code Online (Sandbox Code Playgroud)

如果我运行Foo.hello(%{name: "Alice"}),我得到以下结果:

[%{name: "Alice"}, "Alice"]
Run Code Online (Sandbox Code Playgroud)

然后,我了解到我可以在Foo不改变其功能的情况下重写模块:

defmodule Foo do
  def hello(%{name: name} = x) do
    IO.inspect [x, name]
  end
end
Run Code Online (Sandbox Code Playgroud)

为什么这是可能的?函数参数中的等号是什么?它是普通的匹配算子吗?

根据我的理解,操作员=将右侧的值与左侧的图案进行匹配.

[编辑]

看完贾斯汀的回答后,我自己发了一个答案.但是,我仍然需要帮助.

我想知道=运算符在函数头中是否表现不同以及为什么.

如果可以的话,我想找一份官方文件.

Jus*_*ood 4

它确实仍然是匹配运算符。

您可以这样做的原因与您可以这样匹配的原因相同

iex(1)> 1 = x

** (CompileError) iex:3: undefined function x/0
iex(2)> x = 1
1
iex(3)> 1 = x
1
Run Code Online (Sandbox Code Playgroud)

在函数头内部,x只要您使用该函数并将参数传递给它,就会有一个值(与您可以将函数定义为的原因相同def hello(x) do ... end)。这意味着您可以在匹配运算符的右侧使用它。