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

投稿した 2 番目の方法は、ユーザーデータに __index フィールドにテーブルが割り当てられたメタテーブルが既にある場合に機能します。安全上の理由から、Lua からユーザーデータにメタテーブルを割り当てることはできません。そのため、ユーザーデータを Java バインディング コードからのメタテーブルに割り当てる必要があります。

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 に答える