Attualmente sta cercando di capire l'operatore "^" in Elisir. Dal sito web:Qual è l'operatore "pin" per e sono mutabili le variabili Elixir?
Il perno operatore^può essere utilizzato quando non v'è alcun interesse a rebinding una variabile, ma piuttosto in corrispondenza con il suo valore prima della partita:
Source - http://elixir-lang.org/getting_started/4.html
Con questo in mente, è possibile collegare un nuovo valore ad un simbolo in questo modo:
iex> x = 1 # Outputs "1"
iex> x = 2 # Outputs "2"
Posso anche fare:
iex> x = x + 1 # Outputs "3"!
Quindi la mia prima domanda è; Le variabili Elixir sono mutabili? Sembra proprio che sia così ... Non dovrebbe essere possibile in un linguaggio di programmazione funzionale?
Così ora veniamo al gestore "^" ...
iex> x = 1 # Outputs "1"
iex> x = 2 # Outputs "2"
iex> x = 1 # Outputs "1"
iex> ^x = 2 # "MatchError"
iex> ^x = 1 # Outputs "1"
penso che l'effetto di "^" è quello di bloccare "x" per l'ultimo valore rilegata ad esso. È tutto lì? Perché non assicurarti che tutte le "corrispondenze"/assegnazioni siano immutabili come Erlang stesso?
Stavo abituando a che ...
È solo ombreggiato dopo la riassegnazione. I dati sono ancora immutabili. Un esempio di chiusura dal [blog di Joe Armstrong] (http://joearms.github.io/2013/05/31/a-week-with-elixir.html) dovrebbe chiarire. Secondo me è confuso. –
Penso che a un certo punto abbiamo bisogno di aggiungere qualcosa ai documenti Elixir per spiegare questo dato che questa domanda si presenta regolarmente. –
Capisco che l'operatore^sia necessario per eseguire una corrispondenza di pattern e un assegnamento sul termine sinistro. Ciò che per me non è chiaro è perché il comportamento predefinito sia "shadowing/re-assigning" piuttosto che pattern matching: - Nel mio codice ho davvero pochissima necessità di riassegnare; - In un codice che afferma di avere dati immutabili, mi aspetterei che la riassegnazione sia esplicita. – Pascal