2013-01-20 35 views
0

我有以下問題,有人可以幫助我嗎?Lua Metatables - 用冒號語法調用函數

comp = {} 
comp.__index = function(obj,val) 
    if val == "insert" then 
    return rawget(obj,"gr")["insert"] 
    end 
    return rawget(obj, val) 
end 

comp.new = function() 
    local ret = {} 
    setmetatable(ret, comp) 
    ret.gr = display.newGroup() 
    return ret 
end 
local pru = comp.new() 

pru.gr:insert(display.newImage("wakatuBlue.png")) - 這條線的工作,但我不希望使用gr屬性來訪問插入的方法,我想直接調用插件的方法和元表__index功能做的工作

pru:insert(display.newImage("wakatuBlue.png")) - 此行不起作用,我有一個"bad argument #-2 to 'insert' (Proxy expected, got nil)"錯誤,這是我期待使用的方式

+0

您應該在您的描述中提到該代碼適用於Corona SDK。 –

回答

2

你想要這樣的東西嗎?

comp = {} 
comp.__index = function(obj,val) 
    if val == "insert" then 
    return rawget(obj,"gr"):insert(val) 
    end 
    return rawget(obj, val) 
end 
0

__index工作得很好;這是因爲你的最後一次通話將被解釋爲:

pru.insert(pru, display.newImage("wakatuBlue.png")) 

,而你想/需要的是:

pru.insert(pru.gr, display.newImage("wakatuBlue.png")) 

您可能需要調用它,或者解釋你正在嘗試做的。

+0

我不知道爲什麼錯誤是參數#-2是零,當它應該是pru'不是零(只是不是一個代理)。 –

+0

這是因爲Corona將代理檢測爲帶有指向某些用戶數據的字段「_proxy」的表。如果您將'_proxy = {}'添加到'pru',您將得到一個不同的錯誤(「代理預期,得到表」)。 –