LuaJava中如何设置错误处理程序(a,b,error_function_index)以应对长尾错误情况?
- 内容介绍
- 文章标签
- 相关推荐
本文共计510个文字,预计阅读时间需要3分钟。
LuaState.pcall(num_args, num_returns, error_handler_index)函数用于执行Lua代码,并处理可能的错误。要为该函数设置错误处理程序,您可以:
1. 定义一个错误处理函数,该函数将接收错误信息。
2.将该函数的索引传递给error_handler_index参数。
例如,可以这样调用:
lua
function myErrorHandler(err) print(Error: .. err)endLuaState.pcall(2, 1, myErrorHandler)
在Java中使用LuaJava获取结果:
javaLuaState state=LuaStateFactory.createState();LuaJava luaJava=new LuaJava(state);
// 调用Lua函数并获取结果Object result=luaJava.call(LuaFunctionName, argument1, argument2);
这将调用Lua中的函数,并使用LuaJava从Lua中获取结果。
我打电话给: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...
本文共计510个文字,预计阅读时间需要3分钟。
LuaState.pcall(num_args, num_returns, error_handler_index)函数用于执行Lua代码,并处理可能的错误。要为该函数设置错误处理程序,您可以:
1. 定义一个错误处理函数,该函数将接收错误信息。
2.将该函数的索引传递给error_handler_index参数。
例如,可以这样调用:
lua
function myErrorHandler(err) print(Error: .. err)endLuaState.pcall(2, 1, myErrorHandler)
在Java中使用LuaJava获取结果:
javaLuaState state=LuaStateFactory.createState();LuaJava luaJava=new LuaJava(state);
// 调用Lua函数并获取结果Object result=luaJava.call(LuaFunctionName, argument1, argument2);
这将调用Lua中的函数,并使用LuaJava从Lua中获取结果。
我打电话给: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...

