在julia函数中:通过引用或值传递?

时间:2016-08-13 20:47:19

标签: julia

在julia中,我们如何知道某个类型是通过值还是通过引用来操纵的?

以java为例(至少对于sdk):

  • 基本类型(名称以小写字母开头的类型,如“int”)由值操纵

  • 对象(名称以大写字母开头的对象,如“HashMap”)和数组通过引用进行操作

因此很容易知道在函数内修改的类型会发生什么。

我很确定我的问题是重复但我找不到重复...

修改

此代码:

function modifyArray(a::Array{ASCIIString,1})
    push!(a, "chocolate")
end

function modifyInt(i::Int)
    i += 7
end

myarray = ["alice", "bob"]
modifyArray(myarray)
@show myarray

myint = 1
modifyInt(myint)
@show myint

返回:

myarray = ASCIIString["alice","bob", "chocolate"]
myint = 1

这对我来说有点混乱,以及我提交这个问题的原因。 @StefanKarpinski的评论澄清了这个问题。

我的困惑来自于我认为+ =作为操作员,像推的方法!这是修改对象本身。但事实并非如此。

i += 7应该被视为i = i + 7(对不同对象的绑定)。实际上,如果我使用modifyArray,那么a = ["chocolate"]的行为将是相同的。

1 个答案:

答案 0 :(得分:3)

我认为最严格的答案是

中的答案

Julia function argument by reference

  

严格地说,朱莉娅不是"按参考号码"但是"值为a的值调用   参考" ,或者"按分享呼叫",如大多数语言所使用的那样   python,java,ruby ......