【问题标题】:How to solve lua errors: "attempt to index ? (a nil value)" [duplicate]如何解决lua错误:“尝试索引?(一个零值)”[重复]
【发布时间】: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


【解决方案1】:

我似乎通过添加需要行来包含库来解决问题。所以新的脚本是:

String script = new String (
            "require 'com.lariennalibrary.pixelboard.library.PBLUAlibrary'"
            +  "function event_touch (  )"  
            + "   pb.open_form ('view_monster');"
            + "   print ('I ran the next button lua script');"
            + "end");

它要求包含我的库类,它将添加所有“pb.*”函数。我可能错误地删除了该行,或者在没有它的情况下设法使其工作。由于所有脚本都需要此库,因此我可能会在尝试运行的每个脚本之前默认附加它。

再次感谢

【讨论】:

    【解决方案2】:

    大部分人说这与表和数组的索引问题有关

    它与table 和array 索引有关。如果您尝试索引一个对象并且该对象是nil,您将收到该错误:

    我根本不使用表 [..] 这是 lua 脚本:

    pb.open_form
    

    pb 正在被索引。应该是nil

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-25
      • 1970-01-01
      • 2014-05-27
      • 1970-01-01
      • 2021-05-15
      • 1970-01-01
      • 2016-09-19
      • 1970-01-01
      相关资源
      最近更新 更多