reference - Julia 函数引用参数

标签 reference pass-by-reference julia

文档说

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/

相关文章:

c++ - 仅在某些情况下具有引用外部变量的属性的类

java - 自动更新 boolean 值

c - 如何从递归中的函数编辑指向列表节点的指针?

dataframe - Julia 数据帧 : remove column by name

java - main 中的数组引用 main 之外的数组

python - 在 Python 中传递数组/列表的子集引用作为参数

java - android TextWatcher 改变外部类私有(private)字段

julia - 从 Julia 中的两个向量创建向量

julia - Julia 中的编译器消息

arrays - 我可以动态引用数组来执行数学函数吗?