Lua 如何将xpcall与具有参数的函数一起使用?

Lua 如何将xpcall与具有参数的函数一起使用?,lua,Lua,上有一个关于如何在没有参数的函数上使用xpcall的示例。但是如何在这样的函数上使用xpcall: function add (a, b) return a + b end 它应该得到返回值。 这是我的尝试(不起作用,我得到:false,错误处理错误, 无): 如果您使用的是Lua5.1,那么我认为您需要将所需的函数调用包装到另一个函数中(不带参数),并在调用xpcall时使用该函数 local function f (a,b) return a + b end local func

上有一个关于如何在没有参数的函数上使用xpcall的示例。但是如何在这样的函数上使用xpcall:

function add (a, b)
  return a + b
end
它应该得到返回值。 这是我的尝试(不起作用,我得到:false,错误处理错误, 无):


如果您使用的是Lua5.1,那么我认为您需要将所需的函数调用包装到另一个函数中(不带参数),并在调用
xpcall
时使用该函数

local function f (a,b)
  return a + b
end

local function err (x)
  print ("err called", x)
  return "oh no!"
end

local function pcallfun()
    return f(1,2)
end

status, err, ret = xpcall (pcallfun, err)

print (status)
print (err)
print (ret)
在Lua和
xpcall中
现在直接接受函数参数:

xpcall(f,msgh[,arg1,···])

此函数类似于
pcall
,只是它设置了一个新的消息处理程序
msgh

因此,我们的呼吁是:

status, err, ret = xpcall (f, err, 1, 2)

在您的示例代码中。

感谢您的解决方案!我也在一秒钟内在我的主要帖子上发布了一个替代解决方案。还请注意,LuaJIT尽管支持5.1,但也允许您通过xpcall传递参数。@EdwardBlack您的“替代”解决方案是我在回答的5.2和5.3部分中指出的。你不应该把答案放在你的帖子里。如果你回答了自己的问题,那么给你的问题添加一个答案。那完全可以接受。你的回答没有任何例子。如果我给我的问题添加了一个答案,那么我就不能在答案中设置代码的格式。我不生气。我的回答中没有一点生气。我很困惑,想确保你明白我的回答涵盖了你列为“备选方案”的解决方案(以防你不明白)。我还想向你们解释如何正确回答他们自己提出的问题(通过发布答案而不是更新问题)。由于@EtanReisner解释的原因,回滚以从问题中删除答案。
function f (a,b)
  return a + b
end

status, ret, err = xpcall (f, debug.traceback, 1,5)

print (status)
print (ret)
print (err)
function f (a,b)
  return a + b
end

status, ret, err = xpcall (f, debug.traceback, 1,5)

print (status)
print (ret)
print (err)