【发布时间】:2015-10-18 10:32:49
【问题描述】:
关于这种错误的帖子很多,大多数人说它与表和数组索引问题有关。但我根本没有使用表,我只是想调用我制作的库函数,但我得到了这个错误。这是从java调用的lua脚本:
String script = new String (
"function event_touch ( )"
+ " pb.open_form ('view_monster');"
+ " print ('I ran the lua script');"
+ "end");
PBLUAengine.run_script(script, "event_touch");
这在捕获异常时给了我以下错误:
"function event_touch() pb.open_form('view_monster'); print('我运行了lua脚本');end:1次尝试索引?(一个nil值)"
run_script() 函数这样调用脚本(我用的是luaj):
public static LuaValue run_script ( String script )
{
try
{
LuaValue chunk = s_globals.load( script );
return chunk.call();
}
catch ( Exception e)
{
Gdx.app.error ("PBLUAengine.run_script()", e.getMessage() );
}
return null;
}
库方法是这样的,当从 java 调用时,同样的代码可以工作:
static class open_form extends OneArgFunction
{
public LuaValue call (LuaValue formname)
{
String tmpstr = (String ) CoerceLuaToJava.coerce(formname, java.lang.String.class );
try
{
PBscreen_game.hide_subscreen(PBscreen_game.MENU_SUBS);
PBscreen_game.show_subscreen ( PBscreen_game.FORM_SUBS);
PBsubscreen_form.open_form ( new PBform_regular ( tmpstr ) );
}
catch (Exception e)
{
Gdx.app.error("PBLUAlibrary.open_form", e.getMessage());
}
return valueOf ( 0 );
}
}
它基本上将 lua 参数转换为字符串,创建一个新的 from 并将参数传递给字符串。
库函数的声明如下:
public LuaValue call( LuaValue modname, LuaValue env )
{
LuaValue library = tableOf();
library.set( "open_form", new open_form() );
library.set( "open_system_form", new open_system_form() );
env.set( "pb", library );
return library;
}
这可能是我在整个系统中可以看到的唯一“表”。这通常用于将正确的类与正确的函数名称联系起来。
有人有想法吗?
【问题讨论】:
-
最后一个
call函数在哪里被调用以将pb全局设置为lua 状态?run_script函数是您在第一个代码 sn-p 中显示的函数吗?第二个论点在哪里?您应该将对象设置到库或函数中吗? (我应该提一下,我根本不懂 java 或 luaj。)
标签: java indexing lua null luaj