Change exclusive on Range

Er...

  How do I change the end exclusivity of a pre-existing range?

T.

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?

Regards,
Florian Gross

Perhaps you can't. Can you change anything else about a pre-existing
range? I'm intentionally not polluting my response by looking at the
docs. If I were to write a Range class from scratch, it would be
read-only.

So the answer to your question _would_ be: create a new range :slight_smile:

Gavin

···

On Monday, October 11, 2004, 12:10:39 PM, trans. wrote:

Er...

  How do I change the end exclusivity of a pre-existing range?

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.

···

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?

Doh! Of course, that is best idea. Mark said same thing.

Thanks guys!
T.

···

On Monday 11 October 2004 01:00 am, Gavin Sinclair wrote:

So the answer to your question _would_ be: create a new range :slight_smile:

trans. (T. Onoma) 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.

Interesting approach! That's rather novel. Thanks for sharing. :slight_smile:

- Jamis

--
Jamis Buck
jgb3@email.byu.edu
http://www.jamisbuck.org/jamis

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

···

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.

Just occurred to me: Does that mean range is Multiton, like Symbol ?

T.

···

On Monday 11 October 2004 02:40 am, Mark Hubbart wrote:

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.