2016-10-12 2 views

Antwort

5

Da alle Begriffe in Elixir unveränderlich sind, gibt es für den Benutzer keinen Unterschied, ob das Argument "nach Wert" oder "nach Referenz" übergeben wird. Sie können den Wert eines Ausdrucks in einer Funktion niemals ändern und dies in der Variablen widerspiegeln, die der Aufrufer an die Funktion gesendet hat. Karten könnten speziell als "durch Verweis" weitergegeben werden, da nur ein Zeiger auf sie von der VM an die Funktion gesendet wird, was sehr effizient ist.

Eine Sache zu beachten ist, dass Begriffe, die an andere Prozesse übergeben werden, tief von der VM kopiert werden. Die einzige Ausnahme sind "große" Zeichenfolgen, normalerweise> 64 Byte, die als Verweis auf einen globalen binären Heap übergeben werden, und die Referenzzählung für die Garbage Collection.

Ich vermute, es ist nach Wert gegeben Elixir Prinzip keine Nebenwirkung.

Elixier ist nicht rein, es hat Nebenwirkungen. Zum Beispiel können Sie I/O zu jeder Funktion hinzufügen. Du hast wahrscheinlich keine veränderlichen Werte gemeint.

+0

Ich würde vorschlagen, "Begriffe an andere Prozesse übergeben" als "Begriffe als Nachrichten gesendet" –

+0

@FredtheMagicWonderDog Ich dachte darüber nach, aber ist das folgende nicht technisch eine "Nachricht" aber wird die Karte tief kopieren? 'map =% {...}; spawn (fn -> IO.inspect (map) end) '? – Dogbert

+1

Gute Frage. Ich muss darüber nachdenken. –

Verwandte Themen