質問
このような既存の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
}
所属していません StackOverflow