[Date Prev][Date Next][Thread Prev][Thread Next]
- Subject: Re: '__iter', yet again!
- From: Francesco Abbate <gslshell@...>
- Date: Wed, 16 Dec 2009 15:32:05 +0100
2009/12/16 Jerome Vuarand <email@example.com>:
> 2009/12/16 John Hind <firstname.lastname@example.org>:
>> I really cannot see why this solution is resisted – it is fully backward
>> compatible and syntactically uncomplicated. The context of the explist is
>> easily distinguishable being bracketed by the reserved words ‘in’ and ‘do’.
> The beauty of the language, is that it has very few concepts, used in
> many places. Rather than having a specific mechanism to iterate over
> objects, the for loop use the mechanisms of multiple return values and
> first class functions. The resistance comes from the fact that you
> want to make Lua more complicated, just to save an explicit method
> call. And that's assuming that the implicit __iter is better syntax
> than an explicit method, which is arguable (e.g. I would disagree with
> you). And concise and cryptic syntax overriding isn't even part of OO,
> it's just often bundled with it.
I agree with you that having few simple concepts to describe the
language is a very important benefit. This is also the reason why,
personally, I like the C programming language: a few pervasive
concepts and everything else is left to the programmer.
But there is an error in your arguments because the '__iter'
metamethods does not add a new concept to the language. The feature is
already there and is the metamethods mechanism itself. We are just
talking about adding a new metamethod category to handle iterations
When you write:
obj[key] = value
and you call secretly the '__newindex' metamethods, this is *exactly
the same* logic of calling __iter in the construct:
for val in obj do
Namely, a language construct that is overloaded with object behaviour
by using metamethods.
For the other side I think that the __call metamethod is weird because
the calling of a function is such a fundamental construct that
overloading it can be confusing when you read the code. For the other
side is can always choose to not overload __call if you prefer so.