Mark Hubbart
10/11/2004 6:41:00 AM
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