【问题标题】:Break while loop on Lua if condition is not met如果条件不满足,则在 Lua 上中断 while 循环
【发布时间】:2020-02-06 19:43:45
【问题描述】:

我有这个简单的 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

【问题讨论】:

  • 除非我错过了什么,这不是一个简单的break 声明:if (false == a) break(或类似的东西)吗?
  • 在这种情况下,我是否必须在循环内的每个操作之前重复该条件?我的意思是,假设我有可以改变“a”值的函数,而不是那些高亮命令。如果在第一个函数中更改“a”值,则不会中断循环;它会在打破之前完成它。
  • 确实如此。或者,您可以这样做:if (true == a) center_general_medium:highlight(1) 在每一行
  • 没有其他解决办法吧?
  • 听起来你想要continue 功能,类似于break。见stackoverflow.com/questions/3524970/…

标签: lua


【解决方案1】:

简短回答:不,这不是循环的工作方式。


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

看看你的问题,很明显你实际上有一个内循环和一个外循环;外部是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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多