gpt4 book ai didi

LuaJava 为 LuaState.pcall(a,b, error_function_index) 设置错误处理程序?

转载 作者:行者123 更新时间:2023-12-04 14:10:31 26 4
gpt4 key购买 nike

我想打电话:

LuaState.pcall(num_args,num_returns, error_handler_index).  

我需要知道如何为这个函数设置错误处理程序。事实上,我认为有人展示如何调用 Lua 函数并使用 LuaJava 返回数值结果会很好。这可能会节省大量时间和问题。我正在查找但未找到错误函数的签名,以及如何将其放置在 LuaState 堆栈上的正确位置。所有 Java->Lua 示例要么打印一个没有返回值的值,要么在使用 Lua 传入的 Java 对象上设置值。我想看看如何直接调用 Lua 函数并返回结果。

更新:一种解决方案是使用 LuaState.pcall(1,1,0) 通过为错误处理程序传递零来不传递错误处理程序:
String errorStr;
L.getGlobal("foo");
L.pushNumber(8.0);
int retCode=L.pcall(1,1,0);
if (retCode!=0){
errorStr = L.toString(-1);
}
double finalResult = L.toNumber(-1);

其中 calc.lua 已加载:
function foo(n) 
return n*2
end

现在有没有办法设置错误处理程序?谢谢

最佳答案

如果您还想要堆栈回溯(我确定您这样做:),您可以通过 debug.traceback作为误差函数。看一眼 how it's implemented in AndroLua .

基本上,您必须确保您的堆栈设置如下:

  • 错误处理程序 ( debug.traceback )
  • 您要调用的函数
  • 参数

  • 你可以用你的例子这样做:
    L.getGlobal("debug");
    L.getField(-1, "traceback"); // the handler
    L.getGlobal("foo"); // the function
    L.pushNumber(42); // the parameters
    if (L.pcall(1, 1, -3) != 0) { ... // ... you know the drill...

    关于LuaJava 为 LuaState.pcall(a,b, error_function_index) 设置错误处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8621939/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com