[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Lua with OOP, and direct member accesses
- From: Stephan Herrmann <stephan@...>
- Date: 23 Nov 1999 17:23:17 +0100
Hi,
>
> I have a little issue with implementing OOP with Lua. The
> partcicular topic here is how to access a member of an
> object ala C++, that is without having to prepend the self.
> string before the actual member name.
I know that issue. I decided to keep the self, after trying
the approach below ;-)
> [...] For this, I have use tag methods that track
> accesses to globals to redirect them to a table (the current
> table), but this requires me to maintain a global variable
> with the current table, which is quite unsatisfactory.
Ok, we need that current-object stack. Right.
> Then I have to call a method at start and at end of any
> method to set/clear the current table to the "self" of the
> new method, and to get rid of that I need to use the call
> hook from the debugger interface, which is *really* dirty.
I chose to modify the methods by a settable method for
classes, like
function classSettable (c, i, v)
if type(v) == 'function' then
rawsettable(c, i, function (...)
local savedObject = currentObject
currentObject = arg[1]
call (%v, arg)
currentObject = savedObject
end
)
else
rawsettable(c, i, v)
end
end
So, provided classX has the tag for which the above
tagmethod is set as settable, each definition
function classX:methodY (arg1, arg2) ...
gets wrapped with by a closure that takes care of the currentObject.
Looks clean to me, but the overhead may not really be worth the
optical improvement.
Cheers
Stephan
--------------------------------------------------------------------------
Stephan Herrmann
----------------
Technical University Berlin
Software Engineering Research Group
http://swt.cs.tu-berlin.de/~stephan
phone: ++49 30 314 73174
--------------------------------------------------------------------------