向userdata添加方法

Tim*_*eus 2 java lua lua-userdata

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

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

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

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

是否有一种方法/功能从Lua添加到现有的用户数据

Jud*_*den 5

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

lua_newuserdata(L, SOME_SIZE);
luaL_newmetatable(L, "userData.mt");
lua_setmetatable(L, -2);
Run Code Online (Sandbox Code Playgroud)

如果metatable还没有__index表,则创建一个.

local mt = getmetatable(userData)
mt.__index = {
    newMethod = function()
        print('It works!')
    end
}
Run Code Online (Sandbox Code Playgroud)