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"))
Вы должны либо назвать это так, либо объяснить, что вы пытаетесь сделать.