于 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 = {}
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.