我正在尝试将一个方法添加到这样的现有用户数据中,但这对我来说是个错误。
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的现有用户数据
答案 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
}