Derzeit versuchen, den "^" Operator in Elixir zu verstehen. Von der Website:Was ist der "Pin" -Operator für, und sind Elixir-Variablen veränderbar?
Der Stift Operator^kann verwendet werden, wenn kein Interesse an Rebinding es eine Variable ist, sondern gegen ihren Wert vor dem Spiel in passenden:
Quelle - http://elixir-lang.org/getting_started/4.html
Vor diesem Hintergrund kann man wie so einen neuen Wert zu einem Symbol anhängen:
iex> x = 1 # Outputs "1"
iex> x = 2 # Outputs "2"
Ich kann auch tun:
iex> x = x + 1 # Outputs "3"!
Also meine erste Frage ist; Sind Elixir-Variablen veränderbar? Sieht sicher so aus, wenn das der Fall ist ... Sollte das in einer funktionalen Programmiersprache nicht möglich sein?
So, jetzt kommen wir zum „^“ Operator ...
iex> x = 1 # Outputs "1"
iex> x = 2 # Outputs "2"
iex> x = 1 # Outputs "1"
iex> ^x = 2 # "MatchError"
iex> ^x = 1 # Outputs "1"
Ich denke, die Wirkung von „^“ ist „x“ auf den letzten Wert zu sperren, um es binded. Ist das alles da? Warum nicht nur sicherstellen, dass alle "Übereinstimmungen"/Zuweisungen unveränderlich sind wie Erlang selbst?
Ich war nur, dass Gewöhnung ...
Es ist nur nach Neuzuweisung beschattet. Daten sind immer noch unveränderbar. Das Schlussbeispiel aus [Joe Armstrongs Blog] (http://joearms.github.io/2013/05/31/a-week-with-elixir.html) sollte klarstellen. Meiner Meinung nach ist es verwirrend. –
Ich denke, irgendwann müssen wir etwas zu den Elixir-Dokumenten hinzufügen, um dies zu erklären, da diese Frage regelmäßig gestellt wird. –
Ich verstehe, dass der Operator^erforderlich ist, um eine Musterübereinstimmung und eine Zuweisung auf der linken Seite durchführen zu können. Was mir wirklich nicht klar ist, ist, warum das Standardverhalten "Shadowing/Re-Assigning" ist und nicht das Pattern Matching: - In meinem Code brauche ich wirklich nur sehr selten eine Neuzuweisung; - In einem Code, der behauptet, unveränderliche Daten zu haben, würde ich erwarten, dass die Neuzuweisung explizit ist. – Pascal