LuaJ覆盖 .new()

我正试图使用LuaJ覆盖 .new()函数(方法?)。 我尝试在我的表的元表中设置"new"键,但是在调用lua中的.new()时,它被忽略并运行创建表作为java对象的默认java支持函数。

如果我将键重命名为(例如)"new2",并使用"table.new2()"创建它,它就没有问题。

希望有人可以帮帮我!

到目前为止的代码:

    LuaValue vectorClass = CoerceJavaToLua.coerce(Vector3Lua.class);
    luaj.globals.set("Vector3", vectorClass);

    LuaTable table = new LuaTable();
    table.set("new2", new ThreeArgFunction() {
        public LuaValue call(LuaValue x, LuaValue y, LuaValue z) {
            System.out.println("Created new Vector: " + x + ", " + y + ", " + z);
            return LuaValue.NIL;
        }
    });
    table.set("__index", table);

    vectorClass.setmetatable( table );

Lua测试者:

    local test1 = Vector3.new(2, 3, 4);  --> 不打印测试消息
    local test2 = Vector3.new2(4, 4, 4); --> 打印测试消息

这样做的原因是我可以自动为每个创建的"Vector3"实例应用元表,以将内部功能隐藏对用户不可见。

点赞