Lua goto 语句模拟继续引发的错误

Lua goto statement to simulate continue raised error

一般来说,我的目标是模拟 Lua 中不存在的 continue 语句。我已经阅读了一些关于使用 goto 来执行此操作的线程。我试过了:

for i=0, 9, 1 do
    if i<5 then goto skip end
    print(i)
    ::skip::
end

它引发了“lua: test.lua:2: '=' expected near 'skip'”

有什么解决方法吗?提前致谢

您可以使用 repeat .... until truebreak(适用于 Lua 5.1+)的组合来模拟 continue(在一定程度上):

for i=0, 9, 1 do repeat
    if i<5 then break end
    print(i)
until true end

请注意,它使 break 的行为与 continue 相同,因此您不能按其正常含义使用它。有关详细信息和替代解决方案,请参阅 this SO question

goto 语句不受 Lua 5.1(及更早版本)以及 LuaJIT 的支持,我认为这是真正的问题。以下代码将受 continue 语句约束的代码包装成一个 匿名函数 - 我认为它更具可读性,但您的原始迭代代码几乎保持不变。


for i = 0, 9, 1 do
  (function()
     if i < 5 then return end
     print(i)
  end)()
end