André de Leiradella wrote:
+ Classes and objects
It's #1 to me. This seems to be a common wish, every now and then we
see threads on this topic and many people have developed workarounds
so that it looks like Lua is a real OOP language, and (or as) the
game programing community uses C++ a lot. It's not necessary to add
predefined classes to the core (like Java's VM that rely on String
and StringBuffer at least), just the ability to define classes,
instantiate objects and calling [inherited] methods.
This is very possible... there are various ways to do it, but that's
what metaprogramming is about. Regardless of how you get there you
end up with something about as elegant as you could ask for
(obj:method(), obj.attribute), but you have to 'do it yourself'
(though a simple implementation is already very simple). So I can't
see a 'blessed' way of doing this making it to the core, but I assume
it's already well-covered by projects such as LuaCheia (and
definitely amply covered by the Wiki code).
--Adam
I've done it myself, and I'm not happy. I've seen how others did it
themselves, and I'm still not happy. Unless I'm missing something, I
don't see a way to get rid of the self local that must prefix every
property of the "class", making me write self.this and self.that. I
don't see an elegant way to call inherited methods like
super.something(...) or inherited something(...), but only hacks like
self.super.something(self, ...) or SuperClassName.something(self, ...).
I don't like that users of my applications get stuck because they don't
remember where they should use 'obj.' or 'obj:'.
The "blessed" way of doing it would come up from the community just
like
the packaging system. OOP in Lua would add very little to the core and
make the language a great choice for many applications that require it.
I'd like to stress this: there is no small scripting language with OOP,
I've been looking to many options and they're all bloated with modules.
Please let's not start discussing what OOP is, I'd be more than happy
with classes (that would be first class values, of course) and
instances, getting rid of the self prefix for all properties, a
standard
way to call inherited methods; static (or class) methods and properties
and access previledges would be an welcome bonus.
I *think* that the keyword "new" was reserved in Lua 4, wasn't it? It
made me think that maybe OOP was in its way for Lua 5 :(
Regards,
Andre de Leiradella