Argumento de la función de Julia por referencia

Los documentos dicen

En Julia, todos los argumentos de las funciones se pasan por referencia.

así que me sorprendió ver una diferencia en el comportamiento de estas dos funciones:

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 

Aquí está la salida inesperadamente diferente:

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

si la matriz se pasa por referencia, ¡hubiera esperado foo! para cambiar los ceros a unos.

Respuestas a la pregunta(4)

Su respuesta a la pregunta