Ich möchte eine Instanz einer Java-Klasse als Userdata zu meinem Lua-Skript zurückgeben. Wäre es möglich, von lua aus auf Eigenschaften und Funktionen dieser Instanz zuzugreifen?Ist es möglich, auf Eigenschaften und Funktionen von userdata zuzugreifen?
Wie so
local car = Car.getNew()
print(car.hasHonked)
car:honk()
print(car.hasHonked)
Das ist mein Versuch, das Problem
Java (verkürzt)
public class CarModule extends TwoArgFunction {
String moduleName = "Car";
public LuaValue call(LuaValue modname, LuaValue env) {
LuaValue library = new LuaTable();
library.set("getNew", new getNew());
env.set(moduleName, library);
return library;
}
static class getNew extends ZeroArgFunction {
@Override
public LuaValue call() {
return LuaValue.userdataOf(new Car());
}
}
}
public class Car {
private int count;
@Override
public String toString() {
return "Hello World";
}
public void honk() {
count++;
}
public int getHonks() {
return count;
}
}
lua
local car = Car.getNew()
print(car) -- [email protected]
print(type(car)) -- = userdata
print(car.honk) -- = nil
print(car.getHonks) -- = nil
print(car:honk) -- = LuaError: function arguments expected
print(car:getHonks) -- = LuaError: function arguments expected
print(tostring(car)) -- = Hello World
car:honk() -- = LuaError: attempt to call nil
car:getHonks() -- = LuaError: attempt to call nil
zu lösen
Edit:
die Antwort gefunden here
Statt
return LuaValue.userdataOf(new Car());
I
return CoerceJavaToLua.coerce(new Car());