我已經定義了一個Foo
模塊是這樣的:Elixir中的函數參數中的等號是什麼?
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
爲什麼這是可能的?函數參數中的等號是什麼?這是一個正常的匹配運算符嗎?
在我的理解,=
右側對左側的模式值相匹配的運營商。
[編輯]
在閱讀賈斯汀的回答後,我自己發佈了一個答案。但是,我仍然需要幫助。
我想知道=
運營商是否也該函數頭,爲什麼中表現不同。
而且我想如果可以找到一個正式文件。
謝謝。但是,在第二個'Foo'模塊中,爲什麼給定的參數首先綁定到'x'?這是因爲'x'位於運算符'='的右側嗎?我還不確定價值綁定到函數參數的整個機制。 – Tsutomu
只要你將某些東西傳遞給函數,無論是在左邊還是右邊,'x'都有一個值。就像我說過的那樣,和「你好(x)做...結束」這個時候沒有什麼不同。 「頂級」變量被分配給你傳遞給你函數的任何東西。 –