我如何在Lua中使用由Java定义的实例方法?

我知道可以在Lua中使用Java定义的静态方法,这是因为在http://luaj.org/luaj/README.html的“Java函数库”部分介绍了这一点。

然而,我正在努力找出如何使用相同的实例方法,这里有一个简短的示例:

private static class CallbackStore {
    public void test(final String test) {

    }
}

(我知道我也可以在这里使用静态方法,但在现实生活中不能这样做)

我正在使用以下Lua代码:

--总是将此函数命名为“initCallbacks”

function initCallbacks(callbackStore)
    callbackStore.test("test")
end

它不起作用,因为它期望返回userdata,但我会给它一个字符串。

我像这样调用Lua代码:

globals.load(new StringReader(codeTextArea.getText()), "interopTest").call();
CallbackStore callbackStore = new CallbackStore();
LuaValue initCallbacks = globals.get("initCallbacks");
initCallbacks.invoke(CoerceJavaToLua.coerce(callbackStore));

其中Lua代码由codeTextArea.getText()返回

我的问题的底线是,我如何使我的代码在test作为实例方法时运行?

点赞
用户1632532
用户1632532

当访问成员函数时(不只是在Lua对象中,而是在一般情况下),需要手动提供 this 参数作为第一个参数,如下所示:

callbackStore.test(callbackStore, "test")

或者,您可以使用缩写符号来代替同样的内容:

callbackStore:test("test")
2014-08-11 08:56:39