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 に答える