Lua Metatables - вызов функций с синтаксисом двоеточия

У меня есть следующая проблема, кто-нибудь может мне помочь?

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)" ошибка, это способ, которым я ищу использовать

2 ответа

Решение

Вы хотите что-то подобное?

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

__index работает просто отлично; это потому, что ваш последний вызов интерпретируется как:

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

тогда как вы хотите / должны это быть:

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

Вы должны либо назвать это так, либо объяснить, что вы пытаетесь сделать.

Другие вопросы по тегам