0

我有以下问题,有人可以帮助我吗?

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)"错误,这是我想要使用的方式

4

2 回答 2

2

你想要这样的东西吗?

comp = {}
comp.__index = function(obj,val)
  if val == "insert" then
    return rawget(obj,"gr"):insert(val)
  end
  return rawget(obj, val)
end
于 2013-01-21T04:14:51.703 回答
0

__index 工作得很好;这是因为您的最后一次通话被解释为:

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

而你想要/需要它是:

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

您要么需要这样称呼它,要么解释您要做什么。

于 2013-01-20T02:16:04.843 回答