Julia Funktionsargument durch Referenz

Die Dokumente sagen

In Julia werden alle Argumente zu Funktionen als Referenz übergeben.

so ich war ziemlich überrascht, einen Unterschied im Verhalten dieser beiden Funktionen zu sehen:

function foo!(r::Array{Int64})                                                                                                                                                                                     
        r=r+1                                                                                                                                                                                                      
end


function foobar!(r::Array{Int64})                                                                                                                                                                                  
        for i=1:length(r)                                                                                                                                                                                          
                r[i]=r[i]+1                                                                                                                                                                                        
        end                                                                                                                                                                                                        
end 

hier ist die unerwartet andere Ausgabe:

julia> myarray
2-element Array{Int64,1}:
 0
 0

julia> foo!(myarray);

julia> myarray
2-element Array{Int64,1}:
 0
 0

julia> foobar!(myarray);

julia> myarray
2-element Array{Int64,1}:
 1
 1

wenn das Array als Referenz übergeben wird, hätte ich foo erwartet! die Nullen in Einsen zu ändern.

Antworten auf die Frage(8)

Ihre Antwort auf die Frage