包裹在函数中的全局变量
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 z
或 z = 0
,以便在循环中定义 z
。
有关此的更多信息,请查看 scoping page of the Julia documentation and the local
keyword docstring。
另请参阅此 question/answer:
我正在学习 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 z
或 z = 0
,以便在循环中定义 z
。
有关此的更多信息,请查看 scoping page of the Julia documentation and the local
keyword docstring。
另请参阅此 question/answer: