On Mon, 11 Oct 2004 13:23:27 +0900, trans.  (T. Onoma)
<transami / runbox.com> wrote:
> On Sunday 10 October 2004 10:34 pm, Florian Gross wrote:
> 
> 
> | trans. (T. Onoma) wrote:
> | >   How do I change the end exclusivity of a pre-existing range?
> |
> | In theory this is impossible because Ranges are designed to be immutable
> | objects.
> |
> | For other objects it is possible to change them via .send(:initialize),
> | but Ranges have a check for that.
> |
> | I think the only option would be using evil-ruby, for now.
> |
> | But why do you need this?
> 
> Testing some modifications to Range. One of them is the addition of
> exclude_first?  Then I wanted to try out this alternate notation:
> 
>   -(0..9)  # exclude end
>   +(0..9)  # exclude first
>   ~(0..9)  # exclude both
> 
> Using unary operators, since they have no other meaning for ranges anyway.
> 
> Have a few other interesting changes, as well. It took a while, but it's
> beginning to look quite nice --a good bit more flexible then the current
> Range class.
> 
> T.
> 
> P.S. You may also notice why I'm concerned with precedence, too.

Fascinating!!  A bit esoteric, but pretty elegant nonetheless...

As for modifying the range, are you sure you want to? Maybe consider
just creating a new one. I suspect that someone might be surprised if
they do something like this:

rng = (0..5)
p -rng

... and later find that their range was modified in place. Less
surprising would be for it to return a new range with the
exclusive_end flag set to true.

cheers,
Mark