我有以下问题,有人可以帮帮我吗?
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
属性访问insert方法,我想直接调用insert方法和metatable __index
功能完成工作
pru:insert(display.newImage("wakatuBlue.png"))
- 此行不起作用,我有"bad argument #-2 to 'insert' (Proxy expected, got nil)"
错误,这是我要使用的方式
答案 0 :(得分:2)
你想要这样的东西吗?
comp = {}
comp.__index = function(obj,val)
if val == "insert" then
return rawget(obj,"gr"):insert(val)
end
return rawget(obj, val)
end
答案 1 :(得分:0)
__ index工作正常;这是因为你的上次电话会被解释为:
pru.insert(pru, display.newImage("wakatuBlue.png"))
而你想要/需要它:
pru.insert(pru.gr, display.newImage("wakatuBlue.png"))
你要么像这样打电话,要么解释你想要做什么。