gpt4 book ai didi

function - Julia 范围界定 : why does this function modify a global variable?

转载 作者:行者123 更新时间:2023-12-04 00:18:22 25 4
gpt4 key购买 nike

我是 Julia 的新手,到目前为止我是它的粉丝。但是从多年的 R 编程经验来看,一些范围规则让我感到困惑。

让我们使用这个函数。这完全符合我的预期。

function foo1(x)
y = x
t = 1
while t < 1000
t += 1
y += 1
end
return 42
end

var = 0;
foo1(var)
# 42
var
# 0

但是当对数组做类似的事情时,它会充当一个变异函数(在全局范围内修改它的参数!)

function foo2(x)
y = x
t = 1
while t < 1000
t += 1
y[1] += 1
end
return 42
end

var = zeros(1);
foo2(var)
# 42
var
# 999.0

我意识到我可以通过将第一行更改为 y = copy(x) 来解决此问题,但首先出现这种(危险?)行为的原因是什么?

最佳答案

我会为此写一个答案,但我认为 John Myles White 已经做得比我做得更好,所以我将链接到他的博文:

https://www.juliabloggers.com/values-vs-bindings-the-map-is-not-the-territory-3/

简而言之,x = 1x[1] = 1 是非常不同的操作。第一个是分配——即更改变量 x 的绑定(bind)——而第二个是用于调用 setindex! 函数的语法糖,在数组的情况下,该函数分配给大批。赋值只会改变哪些变量引用了哪些对象,而不会修改任何对象。变异只修改对象,从不改变哪些变量引用了哪些对象。这个答案有更多关于区别的细节:Creating copies in Julia with = operator .

关于function - Julia 范围界定 : why does this function modify a global variable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62534592/

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