封装在函数中的全局变量

时间:2019-11-24 06:59:48

标签: scope julia scoping

我在经济学博士学位中学习Julia,但是遇到了一个对我来说没有意义的问题。我正在尝试编写一个函数,该函数执行一些初步计算,然后执行while循环并返回一些值。我想这样做而不使用全局变量。由于某种原因,我无法使其正常工作。请参阅下面的最小工作示例,该示例为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

对于这个问题不重要,我深表歉意。任何帮助都非常感谢。谢谢。

1 个答案:

答案 0 :(得分:2)

只需在您的while循环之前放置一个local z或另一个z = 0,以便在循环中定义z

有关更多信息,请查看scoping page of the Julia documentationlocal keyword docstring

另请参阅以下问题/答案:In Julia, is there a way to pass a variable from a local scope to the enclosing local scope?