|
|
||
|
ä 2012-6-16 1:29, Dirk Laurie åé:
2012/6/15 Stephen Virgo <stephen@creative-assembly.com>:The immediate problem can be solved thus: game_wrapper.out = function(self,...) return game:out(...) end But using object-oriented calls is rather pointless if you are going to throw away the implied `self`. So I'd rather do it this way: game_wrapper.out = function(...) return game:out(...) end and call it as my_game.out("This text should appear in the debug console like as if[...] or you may store the real object somewhere and the __index meta method retrives it and delegate the indexing to it. for example, you may store the real object in a field of the wrapper object, say, __proto__, the code look like: ----------------- code begin -----------------------  local game = game_class:new()  local game_wrapper_mt = {}  function game_wrapper_mt:__index(key)   return self.__proto__[key]  end  function game_wrapper:new()  return setmetatable({__proto__ = game}, game_wrapper_mt)  end  my_game = game_wrapper:new()  my_game:out("This text should appear in the debug console like as if Iâd called game:out()!") -------------------- code end ---------------------- another way is to store the map from the wrapper to the real object in an external (weak) table. |