Lua Metatables - 使用冒号语法调用函数

时间:2013-01-20 00:42:30

标签: syntax lua self colon metatable

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

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

2 个答案:

答案 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"))

你要么像这样打电话,要么解释你想要做什么。