Recursion 在最新的luajit 2.1.0-beta3上,是否可以进行递归xpcall?

Recursion 在最新的luajit 2.1.0-beta3上,是否可以进行递归xpcall?,recursion,lua,luajit,Recursion,Lua,Luajit,我正在luajit 2.1.0-beta3中对Go的defer/panic/recover进行建模,如果能够递归地使用xpcall,那就太好了,因为Go的延迟函数本身可能会出现恐慌,而具有延迟的函数会定期调用具有延迟的其他函数。我正在尝试这个: -- recursive xpcalls, do they work? hmm... looks like we get "error in error handling" ouch=function() error("ouch") end ouch

我正在luajit 2.1.0-beta3中对Go的defer/panic/recover进行建模,如果能够递归地使用xpcall,那就太好了,因为Go的延迟函数本身可能会出现恐慌,而具有延迟的函数会定期调用具有延迟的其他函数。我正在尝试这个:

-- recursive xpcalls, do they work? hmm... looks like we get "error in error handling"

ouch=function() error("ouch") end

ouch2=function() error("ouch2") end

ok=function() return "ok" end

h2 = function(err)
   print("panicHandler2 running with err =", err) -- hmm, can't get this to call?
end

h = function(err)
   print("panicHandler running with err =", err)
   g = {xpcall(ouch2, h2)}
   for k,v in pairs(g) do print("g result of recursive xpcall is k=",k," val=",v) end
   -- g result of recursive xpcall is k=    1    val=   false
   -- g result of recursive xpcall is k=    2    val=   error in error handling
end

r={xpcall(ouch, h)}

for k,v in pairs(r) do print("r result of top xpcall is k=",k," val=",v) end


-- output:

$ luajit
LuaJIT 2.1.0-beta3 -- Copyright (C) 2005-2017 Mike Pall. http://luajit.org/
JIT: ON SSE2 SSE3 SSE4.1 BMI2 fold cse dce fwd dse narrow loop abc sink fuse
> dofile 'rexp.lua'
panicHandler running with err = rexp.lua:3: ouch
g result of recursive xpcall is k=  1    val=   false
g result of recursive xpcall is k=  2    val=   error in error handling
r result of top xpcall is k=    1    val=   false
> 
因此,我看到的不是调用h2,而是“错误处理中的错误”

有没有一种方法可以让递归xpcalls工作

上面的代码是使用OSX上的clang构建的,使用默认的Makefile,未注释
XCFLAGS+=-DLUAJIT\u ENABLE\u LUA52COMPAT
。所以它是一个C构建的,不是C++构建的,在MACOS上。< /P>
更新:适用于PUC Lua5.1.5和5.3.4,h2将被调用。

值得一提的是,此问题已升级到LuaJIT的问题跟踪程序,Mike Pall将其标记为无法修复