Matching in die gleiche Variable, mit dem gleichen Wert. Dies funktioniert:Wie funktioniert Musterabgleich von Vielfachen der gleichen Variablen auf der linken Seite in Elixier
iex(21)> {a, a} = {1, 1}
{1, 1}
In die gleiche Variable passen, unterschiedliche Werte. Diejenigen, dies nicht tun:
iex(22)> {a, a} = {1, 2}
** (MatchError) no match of right hand side value: {1, 2}
iex(22)> {a, a} = {2, 1}
** (MatchError) no match of right hand side value: {2, 1}
ich verstehen kann, wenn der Operator^warum das funktioniert:
iex(22)> b = 1
1
iex(23)> {a, ^b} = {1, 1}
{1, 1}
Aber ich bin ein wenig verwirrt, warum dies nicht:
iex(24)> a = 2
2
iex(25)> {a, ^a} = {1, 1}
** (MatchError) no match of right hand side value: {1, 1}
Mein erster Gedanke war, dass das letzte Beispiel funktionieren würde. Wenn der interne Mechanismus hinter der Szene eine Platzierung der Variablen vornimmt und dann ihren Wert für die nächste Übereinstimmung verwendet, wenn sie auf die gleiche Variable wie im ersten Beispiel passt.
Ich bin neugierig, wie funktioniert das Muster übereinstimmen auf Vielfachen der gleichen Variablen intern in Elixir?
Vielen Dank für die Antwort. Ich bin mir dessen bewusst, wie ich es in meiner Frage dargelegt habe. Um zu klären, wenn nötig, meine Frage und was mich interessiert ist, was geht intern weiter? Wenn "a = 2; {a,^a} = {1,1}" ist, behält die Ausführung das alte "a = 2" in einer Art "Geltungsbereich" bei und führt dann die erste Übereinstimmung von "a" und für das zweite "a", verwendet das alte 'scope'. Ändert die Mach-Zuweisung auf dem ersten "a" den "scope" nur dann, wenn zuvor "a" nicht definiert wurde. – elpddev