【发布时间】:2020-06-23 12:20:28
【问题描述】:
我是 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) 来解决此问题,但首先出现这种(危险?)行为的原因是什么?
【问题讨论】:
-
这种行为与变量作用域无关,这是关于突变和赋值不一样的事实:stackoverflow.com/questions/33002572/…
标签: function arguments julia scoping