java - 向用户数据添加方法

标签 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 向现有用户数据添加方法/函数

最佳答案

如果用户数据已经有一个元表,其中一个表分配给 __index 字段,那么您发布的第二种方法将起作用。出于安全原因,元表不能从 Lua 分配给用户数据。因此,您必须从 Java 绑定(bind)代码中为用户数据分配一个元表。

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
}

关于java - 向用户数据添加方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6360620/

相关文章:

java - Wicket 表单中的多个 TextField

c# - 属性 objective-c # - 如何将带有属性目标的代码移植到 Java 中?

java - 如何使 TreeSelectionListener 作为 JEditorPane 上的 Hyperlinklistener 工作?

algorithm - 数字子集的总和

go - 将 Go Struct 实例转换为 Lua 表

java - 如何在java中处理字符串编码?

string - 检测变量是否可以在 Lua 中打印

lua - "Attempt to index local..."为什么会出现此错误?

reference - 如何将对表的引用添加到 userdata 对象?

c++ - Lua API 推送用户数据