有没有办法从执行中期停止lua pcall到lua功能块?我使用多个线程,最好取消飞行中的功能。
答案 0 :(得分:2)
最简单的方法是调用error('my message')
,因为这将中止执行,并将nil, 'my message'
作为pcall()
的结果返回。如果你想从“外部”中止一个正在运行的协同程序(或“主”块),我知道没有修改Lua VM的唯一方法就是将一个调试挂钩附加到coroutine或主块并调用{{ 1}}来自那个调试钩子:
error()
你应该看到这样的事情:
print(1)
local count = 0
debug.sethook(function(event, line)
if count > 1 then error('done', 2) end
count = count + 1
end, "l")
print(2)
print(3)
print("not getting here")
如果是1
2
3
script.lua:4: done
,您会看到pcall
调用的参数将作为error()
的错误消息传递。
检查的条件可以非常详细;例如,您可以检查从特定函数调用的钩子,并在中止之前执行一定数量的命令。