无法通过函数修改全局变量

我对julia中修改名称指引和赋值的区别,以及如何通过函数改变全局变量有些困惑,以下是个例子:为什么函数2和函数3都无法改变y,只有函数1可以?请高手指点一下,感谢!

x = [2.3, 3.4, 5.6]
y = similar(x)

function change_y1!(x,y)
    max_y = 1.3434
    y[1] = max_y  # 可以改变y的第一个元素
end

function change_y2!(x,y)
    y = x  # 失败  y = [2.3, 3.4, 5.6] 也不行?
end

function change_y3!(x,y)
   y = similar(x)  # 为何设定类型后反而不能改y了?
   max_y = 1.3434
   y[1] = max_y
end

因为在函数里直接用y = ...会创建一个与全局和参数无关的新的变量,函数中的y会指向一处新的内存。

1 个赞

解决了我的疑惑,感谢指点!

.= 或者 copyto! 可以实现