包裹在函数中的全局变量

Global variable wrapped in a function

我正在学习 Julia 作为我的经济学博士学位的一部分,但我遇到了一个对我来说没有意义的问题。我正在尝试编写一个函数来执行一些初步计算,然后进行 while 循环和 returns 一些值。我想在不使用全局变量的情况下执行此操作。出于某种原因,我无法让它工作。请参阅下面的最小工作示例,其中 returns z 的未定义变量错误。

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 zz = 0,以便在循环中定义 z

有关此的更多信息,请查看 scoping page of the Julia documentation and the local keyword docstring

另请参阅此 question/answer: