Lua中使用goto语句模拟continue时出现的错误

通常,我的目标是模拟在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'"。

有没有任何解决方法?提前谢谢。

点赞
用户1442917
用户1442917

你可以使用 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

请注意,这会使 breakcontinue 一样工作,因此您不能再以其正常含义使用它。有关详细信息和替代方案,请参见此 SO 问题

2020-12-24 06:37:43
用户1120127
用户1120127

goto 语句在 Lua 5.1(及以下版本)和 LuaJIT 中都不被支持,这是我认为真正的问题。以下代码将需要有 continue 语句的代码块包装在一个 匿名函数中——我认为这种写法更易读而且你的原始循环代码几乎没有改变。

for i = 0, 9, 1 do
  (function()
     if i < 5 then return end
     print(i)
  end)()
end
2022-04-04 13:52:31