skiwi
skiwi

Reputation: 69249

How do I use a Java-defined instance method in Lua?

I'm aware that it is possible to use Java defined static methods in Lua, due to the section "Libraries of Java Functions" on http://luaj.org/luaj/README.html.

However I am struggling to find out how I can use the same for instance methods, I have a shortened example here:

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

    }
}

(I am aware that I can use a static method here as well, but it is not possible with the real life scenario)

I am using the following Lua code:

-- Always name this function "initCallbacks"

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

Which does not work as it is expecting userdata back, but I give it a string.

And I call the Lua code like this:

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

where the Lua code is returned by codeTextArea.getText()

Bottom line of my question is, how do I make my code running with test as an instance method?

Upvotes: 1

Views: 278

Answers (1)

mtsvetkov
mtsvetkov

Reputation: 843

When accessing member functions (in Lua objects in general, not just luaj) you have to provide the this argument manually as the first argument like so:

callbackStore.test(callbackStore,"test")

Or, you can use the shorthand notation for the same thing:

callbackStore:test("test")

Upvotes: 2

Related Questions