如果不满足条件,则在Lua上同时中断循环

时间:2019-10-09 12:56:41

标签: lua

我有一个简单的while循环。我想使它在条件变量更改时打破循环。相反,它完成了循环,然后才中断它。

a = true
while( a == true )
do
  center_general_medium:highlight(1)
  center_general_small:highlight(1)
  center_general_tiny:highlight(1)
  a = false << ------------------- should break loop here if, for some reason, "a" value is changed.
  center_general_medium:highlight(1)
  center_general_small:highlight(1)
  center_general_tiny:highlight(1)
end

1 个答案:

答案 0 :(得分:2)

简短的回答:不,那不是循环的工作原理。


长答案:从技术上讲,您可以用很多魔术来做到这一点,但是看起来并不漂亮。协程和元方法可以带给您很长的路要走,如果您愿意为它做些工作,但我认为在您的示例中不值得这样做。

看看你的问题,很明显,你实际上有一个内在和一个外在的循环。外部是while循环,内部只是循环几个对象并在它们上调用:highlight(1)。因此,您真正想要的是一次break经过两个循环,这是无法完成的。相反,您应该将内部循环编写为实际循环,并在a == false时中断该循环,然后由于未满足条件而停止外部循环。

local objects = {
   center_general_medium,
   center_general_small,
   center_general_tiny,
   center_general_medium,
   center_general_small,
   center_general_tiny
}

a = true

while a do
   for _, object in ipairs(objects) do
      object:highlight(1)
      if not a then break end
   end
end