Julia Funktionsargument durch Referenz

7

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.

    
Lindon 06.02.2016, 00:05
quelle

2 Antworten

15

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.

    
Reza Afzalan 06.02.2016 01:04
quelle
8

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 )

    
colinfang 06.02.2016 05:00
quelle