【问题标题】:Julia: Scope of variables in a nested loopJulia:嵌套循环中的变量范围
【发布时间】:2018-09-13 12:50:29
【问题描述】:

我正在尝试更改 for 循环中的变量,该循环位于 while 循环中。我知道 for 循环中变量的范围默认为 local,因此我在要更改的变量前面放了一个 global。这适用于i,但不适用于turn。 当我在 for 循环中在 turn 前面添加 global 时,出现以下错误:

错误:LoadError:语法:global turn:turn 是其封闭范围内的局部变量

i = 0
while(i <= 3)
    global i += 1
    turn = 0
    for j = 1:2
        turn += 1  # if I add a global in front of turn I get an error message
        println("Turn: ", turn)
    end
end

结果是:

Turn: 1
Turn: 2
Turn: 1
Turn: 2
Turn: 1
Turn: 2
Turn: 1
Turn: 2

但我想要的是:

Turn: 1
Turn: 2
Turn: 3
Turn: 4
Turn: 5
Turn: 6
Turn: 7
Turn: 8

如何在嵌套的 for 循环中更改 turn

【问题讨论】:

  • 如果你想使用Turn来计算内部for-loop,不应该在while-loop之外定义吗?
  • 没错。不过,我不完全明白为什么。
  • 因为 ‘turn=0’ 在 while 循环中,所以在运行内部 for 循环之前,您实际上每次都将 LOCAL 变量 ‘turn’ 重置为 0。请注意,没有预定义的全局变量“turn”,这就是错误所抱怨的;)
  • 感谢您的解释!

标签: loops scope julia


【解决方案1】:

我可以通过将 turn 移到 while 循环之外来获得所需的输出。作为记录,我在运行您的代码时也没有收到错误。你用的是什么版本的 Julia?

i = 0
turn = 0
while(i <= 3)
    global i += 1
    for j = 1:2
        global turn += 1  
        println("Turn: ", turn)
    end
end

【讨论】:

  • 你是对的,将转弯放在while循环之外。谢谢你。我正在使用 1.0 版。上面的代码可以正常工作,但是在turn变量前面添加global会导致错误。
  • @HansBambel 它应该给你一个错误,因为你的代码中的turn 是一个局部变量并且你的代码中没有定义一个全局的turn(所以你不能引用一个全局的@987654326 @)。您的代码中的问题是 turn 在每次 while 迭代时归零,这就是为什么您没有得到您想要的结果。
  • 感谢您的解释!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-18
相关资源
最近更新 更多