向userdata添加方法

时间:2011-06-15 15:53:30

标签: java lua lua-userdata

我正在尝试将一个方法添加到这样的现有用户数据中,但这对我来说是个错误。

local userData = luajava.newInstance("Objects.Block") --creates a userdata from a Java class
userData.newMethod = function()
        -- Do stuff
end

我在网站上找到了这个例子,但它不起作用

local userData = luajava.newInstance("Objects.Block")
local mt = getmetatable(userData)
mt.__index.newMethod = function()
        -- Do stuff
end

是否有一种方法可以将方法/函数添加到Lua的现有用户数据

1 个答案:

答案 0 :(得分:5)

如果userdata已经具有分配给__index字段的表的元表,则您发布的第二种方法将起作用。出于安全原因,无法将元数据分配给Lua的用户数据。因此,您必须从Java绑定代码中为userdata分配元表。

lua_newuserdata(L, SOME_SIZE);
luaL_newmetatable(L, "userData.mt");
lua_setmetatable(L, -2);

如果metatable还没有__index表,那么创建一个。

local mt = getmetatable(userData)
mt.__index = {
    newMethod = function()
        print('It works!')
    end
}