文档说
In Julia, all arguments to functions are passed by reference.
所以我很惊讶地发现这两个函数的行为存在差异:
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
这是意想不到的不同输出:
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
如果数组是通过引用传递的,我会期望 foo!将零更改为一。
最佳答案
r=r+1
是一个赋值语句,这意味着它重新分配了r
,因此它不再引用它在父范围。但是r[i]=r[i]+1
变异 r值,变异与赋值不同( a good description here ),之后r
仍然引用其父作用域中的pair变量。
关于reference - Julia 函数引用参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35235597/