は、私はこのようなFoo
モジュールを定義している:私はFoo.hello(%{name: "Alice"})
を実行する場合Elixirの関数パラメータ内の等号とは何ですか?
defmodule Foo do
def hello(x = %{name: name}) do
IO.inspect [x, name]
end
end
が、私は次のような結果を得る:次に
[%{name: "Alice"}, "Alice"]
を、私は変更せずにFoo
モジュールを書き換えることができることを学びましたこのような機能:
defmodule Foo do
def hello(%{name: name} = x) do
IO.inspect [x, name]
end
end
なぜこれが可能ですか?関数パラメータ内の等号とは何ですか?それは正常なマッチ演算子ですか?
私の理解では、オペレータ=
は、左側のパターンと右側の値を一致させます。
[編集]
ジャスティンの答えを読んだ後、私は自分自身で答えを投稿しました。しかし、私はまだ助けが必要です。
=
オペレータが機能ヘッド内で異なる動作をしているかどうか、またその理由を知りたいと思います。
利用可能な場合は、公式のマニュアルを探したいと思います。
ありがとうございました。しかし、2番目の 'Foo'モジュールでは、なぜ与えられた引数が最初に' x'に結びついているのですか?これは 'x'が演算子' = 'の右側にあるからですか?私はまだ、関数のパラメータへの値のバインディングのメカニズム全体を確信していません。 – Tsutomu
'x'は、関数が左辺か右辺かに関わらず、何かを渡すとすぐに値を持ちます。私が言ったように、あなたが 'hello(x)do ... end'を行うときと変わりはありません。 「トップレベル」の変数は、関数に渡すものに割り当てられます。 –