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