2011-06-15 61 views
0

我想添加一個方法到這樣的現有用戶數據,但是這個遊戲我是一個錯誤。添加一個方法到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

+0

你得到了什麼錯誤? – CoolBeans 2011-06-15 16:52:38

回答

4

的添加到現有的用戶數據工作方式如果用戶數據已經具有分配給__index字段的表的元數據,則發佈的第二種方法將工作。出於安全原因,無法將元數據分配給來自Lua的用戶數據。因此,您必須從Java綁定代碼中爲userdata分配metatable。

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 
} 
相關問題