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

我有以下问题,请问谁能帮我?

```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 方法,所以我使用了元表 __index 函数来处理

pru:insert(display.newImage("wakatuBlue.png")) --这一行不工作,我得到了一个 "bad argument #-2 to 'insert' (Proxy expected, got nil)" 错误,这是我想要使用的方式。

点赞
用户1442917
用户1442917

__index 很好用;问题出在你最后一次调用上:

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

但你需要这样做:

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

你需要这样调用,或者解释一下你想要干什么。

2013-01-20 02:16:04
用户856565
用户856565

你想要类似这样的吗?

comp = {}
comp.__index = function(obj,val)
  if val == "insert" then
    return rawget(obj,"gr"):insert(val)
  end
  return rawget(obj, val)
end
2013-01-21 04:14:51