Hi,
In message "[ruby-talk:01054] .."
on 00/01/05, Dave Thomas <Dave / thomases.com> writes:
| If I override '..', is it true that I can only use it in functional
| form? The parser seems to have operator .. hard coded to be a Range.
Yes, and no.
* operator .. and ... are hard coded, so you can only call it by
using `send'. So answer should be yes for the current
interpreter.
* in reference manual, .. and ... are listed among non-redfinable
operators. But the parser treats .. operator (not ... operator)
as redfinable by accident. It is bug. It should not be able to
override. I'll fix it in next release. So answer shoule be no.
The reasons that range operators are hard coded to be a Range are:
* ../... operators appearing in conditionals, it is treated special,
just like ../... operators in scalar context in Perl. It cannot
be done by methods.
* since Range objects are immutable, range objects whose operands
are literals will be cached in the parse tree. It helps
perfomance because ranges appear a lot for array slicing etc.
Clemens suggested that ../... operators out of conditionals to call
../... methods, but I'm hesitating it for the latter reason.
matz.