質問

このような既存の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の既存のユーザーデータにメソッド/関数を追加する実用的な方法はありますか

役に立ちましたか?

解決

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

lua_newuserdata(L, SOME_SIZE);
luaL_newmetatable(L, "userData.mt");
lua_setmetatable(L, -2);

Metatableがまだ__indexテーブルを持っていない場合は、それを作成します。

local mt = getmetatable(userData)
mt.__index = {
    newMethod = function()
        print('It works!')
    end
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top