为userdata添加一个方法。

我正在尝试像这样向现有的userdata添加一个方法,但是这将给我一个错误。

local userData = luajava.newInstance("Objects.Block") --从Java类创建了一个userdata
userData.newMethod = function()
        -- 做某事
end

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

local userData = luajava.newInstance("Objects.Block")
local mt = getmetatable(userData)
mt.__index.newMethod = function()
        -- 做某事
end

有没有一种可行的方法来将方法/函数添加到来自Lua的现有userdata中?

原文链接 https://stackoverflow.com/questions/6360620

点赞
stackoverflow用户1491
stackoverflow用户1491

第二种方法在userdata已经具有了一个元表,并且该元表已经被指定给__index字段时可以使用。出于安全原因,Lua无法将元表分配给userdata。因此,必须在Java绑定代码中为userdata分配元表。

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

如果元表不存在__index字段,则创建一个。

local mt = getmetatable(userData)
mt.__index = {
    newMethod = function()
        print('It works!')
    end
}
2011-06-15 17:05:10