【问题标题】:Add a method to userdata向用户数据添加方法
【发布时间】:2011-09-15 16:19:30
【问题描述】:

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

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

【问题讨论】:

    标签: java lua lua-userdata


    【解决方案1】:

    如果用户数据已经有一个带有分配给 __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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-21
      • 1970-01-01
      • 2015-05-24
      • 1970-01-01
      • 2017-06-12
      • 1970-01-01
      相关资源
      最近更新 更多