gpt4 book ai didi

julia - 在 Julia 功能: passed by reference or value?

转载 作者:行者123 更新时间:2023-12-04 03:14:45 24 4
gpt4 key购买 nike

在 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 的评论澄清了这个问题。

    我的困惑来自于我认为 += 作为一个操作符,一种类似于 push 的方法!这是修改对象本身。但事实并非如此。
    i += 7应视为 i = i + 7 (绑定(bind)到不同的对象)。事实上,这种行为对于 modifyArray 是相同的。如果我使用例如 a = ["chocolate"] .

    最佳答案

    Julia 中对应的术语是 mutableimmutable types :

  • 不可变对象(immutable对象)(bitstype s,例如 Int 或用 immutable 声明的复合类型,例如 Complex )一旦创建就无法修改,因此通过复制传递。
  • 可变对象(数组,或用 type 声明的复合类型)通过引用传递,因此可以通过调用函数来修改。按照惯例,此类函数以感叹号结尾(例如 sort! ),但这不是由语言强制执行的。

  • 但是请注意,不可变对象(immutable对象)可以包含可变对象,该对象仍然可以被函数修改。

    这是 explained in more detail in the FAQ .

    关于julia - 在 Julia 功能: passed by reference or value?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38936868/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com