Die Dokumentation sagt
In Julia werden alle Argumente für Funktionen als Referenz übergeben.
Ich war ziemlich überrascht, einen Unterschied im Verhalten dieser beiden Funktionen zu sehen:
%Vor%Hier ist die unerwartet unterschiedliche Ausgabe:
%Vor%Wenn das Array per Referenz übergeben wird, hätte ich foo erwartet! um die Nullen zu Einsen zu ändern.
r=r+1
ist eine Anweisung Zuweisung . Dies bedeutet, dass r
neu zugewiesen wird, sodass es nicht mehr auf das Paar im übergeordneten Bereich verweist. aber r[i]=r[i]+1
Mutates r-Wert, Mutation unterscheidet sich von Zuweisung ( eine gute Beschreibung hier ), und danach verweist r
immer noch auf seine Paarvariable im übergeordneten Bereich.
Ich denke, das Dokument ist hier etwas vage.
Genau genommen ist Julia "call-by-value, wobei der Wert eine Referenz ist" oder "call-by-sharing", wie es in den meisten Sprachen wie python, java, ruby, js ... verwendet wird. Siehe < a href="https://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_reference"> Wiki
Ein Aufruf nach Referenzverhalten würde tatsächlich foo!
dazu bringen, die Nullen in Einsen zu ändern. Aber Julia unterstützt das nicht. (Wenn Sie C # kennen, ist das ref
oder out
)
Tags und Links reference pass-by-reference julia-lang