For loop julia模块中变量的范围是如何工作的?
运行此代码For loop julia模块中变量的范围是如何工作的?,for-loop,module,scope,julia,For Loop,Module,Scope,Julia,运行此代码 module mod1 export foo function foo() i=0 for ii in 1:10 global i+=ii end i end end mod1.foo() 给出未定义的错误:我未定义 这样做的方法似乎是在变量i之前添加一个global: module mod2 export bar function bar() global i=0 for ii in 1:10
module mod1
export foo
function foo()
i=0
for ii in 1:10
global i+=ii
end
i
end
end
mod1.foo()
给出未定义的错误:我未定义
这样做的方法似乎是在变量i
之前添加一个global
:
module mod2
export bar
function bar()
global i=0
for ii in 1:10
global i+=ii
end
i
end
end
mod2.bar()
这将给出:55
为什么第一种方法不起作用?据我所知,的引入了一个新的范围。因此,我需要循环中的全局变量。但是为什么我也需要它在循环之外呢
(我使用的是julia 1.5.0)写这篇文章的正确方法是:
module mod1
export foo
function foo()
i=0
for ii in 1:10
i+=ii
end
i
end
end
这里介绍了3个范围(从最外层到最内层):
模块的全局范围mod1
本地功能范围foo
车身的局部范围
手册中对这些问题进行了解释。在这种特殊情况下:当
主体的中引用了i
时,我们首先查找在同一范围内定义的名为i
的变量。由于没有找到,我们在封闭范围内查找它,这是foo
的范围。。。并找到使用i=0
声明的变量
如果在本地foo
范围中没有找到名为i
的变量,我们就必须查看封闭范围,这是一个范围。在这种情况下,您必须使用global
关键字来明确允许它(因为它会影响性能)。链接到文档可能会很好:特别感谢您提供了这个快速准确的答案。
julia> mod1.foo()
55