由于http://luaj.org/luaj/README.html上的“ Java函数库”部分,我知道可以在Lua中使用Java定义的静态方法。

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

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

    }
}


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

我正在使用以下Lua代码:

-- Always name this function "initCallbacks"

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


这不起作用,因为它期望返回用户数据,但是我给了它一个字符串。

我这样调用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作为实例方法运行?

最佳答案

当访问成员函数时(通常在Lua对象中,而不仅仅是luaj),您必须手动提供this参数作为第一个参数,如下所示:

callbackStore.test(callbackStore,"test")

或者,您可以将速记符号用于同一件事:

callbackStore:test("test")

09-11 19:34