Lua 中如果条件不满足,中断 while 循环

我有一个简单的 while 循环,当条件变量改变时,我想让它中断循环。但是它完成循环后才中断。

a = true
while( a == true )
do
  center_general_medium:highlight(1)
  center_general_small:highlight(1)
  center_general_tiny:highlight(1)
  a = false << ------------------- 如果出现某种原因,"a" 值已改变,应该在此处中断循环。
  center_general_medium:highlight(1)
  center_general_small:highlight(1)
  center_general_tiny:highlight(1)
end
点赞
用户4984564
用户4984564

短答案是:不行,循环不支持这样做。


长答案:在技术上,你可以通过很多魔法方式实现,但不会很美观。如果愿意付出一些努力,协程和元方法可以帮助你实现这个功能,但在你的例子中,我认为这并不值得。

看着你的问题,很明显你实际上有一个内部循环和一个外部循环;外层是while循环,内层则是在几个对象上循环并调用:highlight(1)。所以你真正想要的是,在两个循环中同时跳出,而这是不可能实现的。相反,你应该将内部循环编写成实际上的循环,并在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
2019-10-10 09:03:34