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 true
和 break
(适用于 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
一般来说,我的目标是模拟 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 true
和 break
(适用于 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