首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Julia1.0 UndefVarError -变量范围

Julia1.0 UndefVarError -变量范围
EN

Stack Overflow用户
提问于 2018-09-19 00:24:25
回答 2查看 756关注 0票数 3

我要从朱莉娅0.7调到1.0。茱莉亚关于变量范围的规则似乎从0.7变到1.0。例如,我想运行这样一个简单的循环:

代码语言:javascript
复制
num = 0
for i = 1:5
    if i == 3
        num = num + 1
    end
end
print(num)

在Julia0.7(和大多数其他语言中)中,我们可以期待循环之后的num = 1。然而,它将招致朱莉娅1.0中的UndefVarError: num not defined。我知道通过使用let我可以做到这一点

代码语言:javascript
复制
let
num = 0
for i = 1:5
    if i == 3
        num = num + 1
    end
end
print(num)
end

它将打印出1,但我确实希望在循环和let块之外获得let。一些答案建议将所有代码放在一个let块中,但是在逐行测试时会引起其他问题,包括UndefVarError。有没有办法可以不使用let阻塞呢?谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-19 00:32:03

这是讨论这里

在循环中为global变量添加num,如下所示。

代码语言:javascript
复制
num = 0
for i = 1:5
    if i == 3
        global num = num + 1
    end
end
print(num)

在Julia 1.0.0 REPL中运行:

代码语言:javascript
复制
julia> num = 0
0
julia> for i = 1:5
           if i == 3
               global num = num + 1
           end
       end
julia> print(num)
1

编辑

对于来到朱莉娅这里的人来说,瓦斯卡在下面的回答中所作的极好的评论是值得注意的:

请记住,在一个函数中,您不会使用全局函数,因为函数中的范围规则与您预期的一样:

关于在没有作用域问题的情况下为相同代码使用函数的良好示例,请参见该答案。

票数 3
EN

Stack Overflow用户

发布于 2018-09-19 22:07:04

请记住,在一个函数中,您不会使用global,因为函数中的范围规则与您预期的一样:

代码语言:javascript
复制
function testscope()
    num = 0
    for i = 1:5
        if i == 3
            num = num + 1
        end
    end
    return num
end


julia> t = testscope()
1

意外行为只出现在REPL中。有关此这里的更多信息

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52396269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档