Re: Inheriting from a userdata object
[
Date Prev][
Date Next][
Thread Prev][
Thread Next]
[
Date Index]
[
Thread Index]
- Subject: Re: Inheriting from a userdata object
- From: Stephen Virgo <melonrock@...>
- Date: 2012年6月20日 09:38:24 +0100
sorry about that. the code in my last post is incorrect.
one possible working __index function might be like this:
Excellent, this worked and is in fact a much more full solution than I need -> I will only be creating one instance of game_wrapper and I am only calling functions in the game object, not retrieving data. I tried a solution similar to the one you gave with no luck. The innovation that I wasn't aware was possible//didn't think of was to pass back a function block with a parameter structure already built in, very clever. You have my thanks.
For completion, I include the full script below:-
local game_wrapper = {}
local game_wrapper_mt = {}
function game_wrapper_mt:__index(key)
local proto = rawget(self, "__proto__")
local field = proto and proto[key]
if type(field) ~= "function" then
return field
else
return function (obj, ...)
if obj == self then
return field(proto, ...)
else
return field(obj, ...)
end
end
end
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()!")