Change exclusive on Range

F

Florian Gross

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

trans. (T. Onoma)

| > 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.
 
J

Jamis Buck

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

- Jamis
 
G

Gavin Sinclair

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

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 :)

Gavin
 
M

Mark Hubbart

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
 
T

trans. (T. Onoma)

create a new range :)

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

Thanks guys!
T.
 
T

trans. (T. Onoma)

|
| 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.

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

T.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
474,159
Messages
2,570,879
Members
47,417
Latest member
DarrenGaun

Latest Threads

Top