ich ein Foo
Modul wie folgt definiert sind:Was ist das Gleichheitszeichen innerhalb eines Funktionsparameters in Elixir?
defmodule Foo do
def hello(x = %{name: name}) do
IO.inspect [x, name]
end
end
Wenn ich die Foo.hello(%{name: "Alice"})
laufen, ich folgendes Ergebnis:
[%{name: "Alice"}, "Alice"]
Dann erfuhr ich, dass ich ohne Änderung des Foo
Modul neu schreiben kann seine Funktionalität wie folgt:
defmodule Foo do
def hello(%{name: name} = x) do
IO.inspect [x, name]
end
end
Warum ist das möglich? Was ist das Gleichheitszeichen innerhalb eines Funktionsparameters? Ist es ein normaler Match-Operator?
In meinem Verständnis entspricht der Operator =
den Wert auf der rechten Seite gegen das Muster auf der linken Seite.
[Bearbeiten]
Nach Justins Antwort lesen, habe ich geschrieben, eine Antwort von mir. Aber ich brauche immer noch Hilfe.
Ich möchte wissen, ob der =
Operator sich innerhalb der Funktion Kopf und warum anders verhält.
Und ich möchte eine offizielle Dokumentation finden, wenn verfügbar.
Danke. Aber, auf dem zweiten 'Foo'-Modul, warum das gegebene Argument an das' x' gebunden ist? Ist dies, weil das 'x' auf der rechten Seite des Operators' = 'liegt? Ich bin mir noch nicht sicher über den ganzen Mechanismus der Wertbindung an die Funktionsparameter. – Tsutomu
'x' hat einen Wert, sobald Sie etwas in die Funktion übergeben, ob es auf der linken oder rechten Seite ist. Wie ich schon sagte, es ist nicht anders als wenn du 'def hallo (x) tust ... end '. Die Variable "top level" wird dem zugewiesen, was Sie an Ihre Funktion übergeben. –