Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Java函数绑定到Lua的方法?_Java_Android_Lua_Java Native Interface - Fatal编程技术网

将Java函数绑定到Lua的方法?

将Java函数绑定到Lua的方法?,java,android,lua,java-native-interface,Java,Android,Lua,Java Native Interface,我正在为我的Android应用程序开发一个Lua包装器,它将允许我编写Lua代码以加快开发速度。我创建了一个名为lua的静态类,其中包含newState和pushString等函数。我通过使用指向Lua_状态的指针传递long来管理Lua状态。正如你所知道的,我不需要任何使交互更容易的花哨的东西,比如重载来推送变量 现在的问题是将Java函数绑定到Lua变量。我想了几种方法,但都很难看 不使用函数,而是将Java函数的引用作为userdatum传递给表,并让_调用元方法负责调用“函数” 修改Lu

我正在为我的Android应用程序开发一个Lua包装器,它将允许我编写Lua代码以加快开发速度。我创建了一个名为lua的静态类,其中包含newState和pushString等函数。我通过使用指向Lua_状态的指针传递long来管理Lua状态。正如你所知道的,我不需要任何使交互更容易的花哨的东西,比如重载来推送变量

现在的问题是将Java函数绑定到Lua变量。我想了几种方法,但都很难看

  • 不使用函数,而是将Java函数的引用作为userdatum传递给表,并让_调用元方法负责调用“函数”

  • 修改Lua内部,使之包含带有Lua C函数的Java引用


  • 有没有更好的办法?还是应该采用第二种方法?(我意识到第一种方法很荒谬,但它在我的脑海中显示为一种解决方案。)

    你可以看看我的简单项目。它包含Lua并使用Android NDK编译

    因为它使用LuaJava,所以它允许使用userdata以类似于您所说的方式将Java函数绑定到Lua。下面是我如何覆盖
    print
    函数以将文本输出到TextView的示例:

    JavaFunction print = new JavaFunction(L) {
        @Override
        public int execute() throws LuaException {
            StringBuilder sb = new StringBuilder();
            for (int i = 2; i <= L.getTop(); i++) {
                int type = L.type(i);
                String val = L.toString(i);
                if (val == null)
                    val = L.typeName(type);
                sb.append(val);
                sb.append("\t");
            }
            sb.append("\n");
            status.append(sb.toString());
            return 0;
        }
    };
    print.register("print");
    

    你可以看看我的简单项目。它包含Lua并使用Android NDK编译

    因为它使用LuaJava,所以它允许使用userdata以类似于您所说的方式将Java函数绑定到Lua。下面是我如何覆盖
    print
    函数以将文本输出到TextView的示例:

    JavaFunction print = new JavaFunction(L) {
        @Override
        public int execute() throws LuaException {
            StringBuilder sb = new StringBuilder();
            for (int i = 2; i <= L.getTop(); i++) {
                int type = L.type(i);
                String val = L.toString(i);
                if (val == null)
                    val = L.typeName(type);
                sb.append(val);
                sb.append("\t");
            }
            sb.append("\n");
            status.append(sb.toString());
            return 0;
        }
    };
    print.register("print");
    

    我决定使用lua_pushcclosure,因为它允许您在可以使用lua_upvalueindex宏检索的函数上“存储”任意值。

    我决定使用lua_pushcclosure,因为它允许您在可以使用lua_upvalueindex宏检索的函数上“存储”任意值。

    还有Kahlua vs LuaJava

    本书中提到:

    发展博客:


    还有卡鲁阿对卢阿贾瓦

    本书中提到:

    发展博客:


    不幸的是,我在这方面没有经验。我想说看看SL4A可能会有好处。他们已经在Android上安装了lua解释器,也许你可以看看他们是怎么做的,然后再为你的解释器建模?不幸的是,我在这方面没有经验。我想说看看SL4A可能会有好处。他们已经在Android上安装了lua解释器,也许你可以看看他们是如何做到的,然后再为你的解释器建模?