2

我正在尝试向这样的现有用户数据添加一个方法,但是这让我犯了一个错误。

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 中的现有用户数据

4

1 回答 1

5

如果 userdata 已经有一个带有分配给 __index 字段的表的元表,则您发布的第二种方法将起作用。出于安全原因,不能将元表分配给 Lua 中的用户数据。因此,您必须从 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-15T17:05:10.490 回答