作为经济学博士学位的一部分,我正在学习 Julia,但我遇到了一个对我来说没有意义的问题。我正在尝试编写一个函数来执行一些初步计算,然后进行 while 循环并返回一些值。我想在不使用全局变量的情况下执行此操作。由于某种原因我无法让它工作。请参阅下面的最小工作示例,该示例返回 z
的 undefined variable 错误。
function test_me(n)
x = 2 + 1
y = x - 1
i = y
while i <= n
println(i)
i += 1
z = 3*i
end
return z
end
我可以通过将 z
设为全局变量来轻松解决问题。
function test_me2(n)
x = 2 + 1
y = x - 1
i = y
while i <= n
println(i)
i += 1
global z = 3*i
end
return z
end
我很困惑,因为我的印象是,将 while 循环包装在函数中意味着 z
位于本地范围内,并且全局声明是不必要的。例如,下面的代码按预期工作。
function test_me3(n)
i = 1
while i <= n
println(i)
i += 1
z = 3*i
end
return z
end
如果这个问题微不足道,我深表歉意。非常感谢任何帮助。谢谢。
最佳答案
只需在 while 循环之前放置一个 local z
或一个 z = 0
即可,以便在循环中定义 z
。
有关此内容的更多信息,请查看 scoping page of the Julia documentation和 local
keyword docstring .
另请参阅此问题/答案:In Julia, is there a way to pass a variable from a local scope to the enclosing local scope?
关于scope - 封装在函数中的全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59015383/