gpt4 book ai didi

for-loop - Julia 模块中的变量范围是如何工作的?

转载 作者:行者123 更新时间:2023-12-04 08:49:05 25 4
gpt4 key购买 nike

运行此代码

module mod1
export foo

function foo()
i=0
for ii in 1:10
global i+=ii
end
i
end

end

mod1.foo()
UndefVarError: i not defined .
似乎这样做的方法是添加 global在变量 i 之前:
module mod2
export bar

function bar()
global i=0
for ii in 1:10
global i+=ii
end
i
end

end

mod2.bar()
这给出: 55为什么第一种方法不起作用?据我了解 for引入了一个新的范围。因此我需要循环内的全局。但是为什么我还需要它在循环之外呢?
(我使用的是 Julia 1.5.0)

最佳答案

正确的写法是:

module mod1
export foo

function foo()
i=0
for ii in 1:10
i+=ii
end
i
end

end
julia> mod1.foo()
55
这里介绍了 3 个作用域(从最外到最内):
  • 模块的全局范围mod1
  • 本地功能范围foo
  • for 的本地范围正文

  • rules for scoping手册中有说明。在这种特殊情况下:当 i for 中提到正文,我们首先查找一个名为 i 的变量在同一范围内定义。由于没有找到,我们在封闭范围内寻找它,即 localfoo的范围| ...并找到使用 i=0 声明的变量.
    如果没有名为 i 的变量已在本地找到 foo范围,我们必须查看封闭范围,即 global范围。在这种情况下,您必须将 global关键字明确允许它(因为它具有性能影响)。

    关于for-loop - Julia 模块中的变量范围是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64169005/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com