Syntax Lua元表-使用冒号语法调用函数

Syntax Lua元表-使用冒号语法调用函数,syntax,lua,self,colon,metatable,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.newGr

我有以下问题,有人能帮我吗

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方法,而元表
\uu index
函数可以工作


pru:insert(display.newImage(“wakatuBlue.png”)
——这行行不通,我有一个
“插入(预期代理,得到零)”的参数不正确”
错误,这是我希望使用的方法

\uu索引工作得很好;这是因为您上次的通话被解释为:

pru.insert(pru, display.newImage("wakatuBlue.png"))
鉴于您希望/需要:

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

你要么像这样称呼它,要么解释你想做什么。

你想要这样的东西吗

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

您应该在描述中提到代码是针对Corona SDK的。我想知道为什么错误是参数#-2为零,而它应该是
pru
,而不是零(只是不是代理)。这是因为Corona将代理检测为一个带有指向某些用户数据的字段
\u Proxy
的表。如果将
\u proxy={}
添加到
pru
,您将得到一个不同的错误(“需要代理,得到表”)。