Substring by range parameter (bug?)

OK. You got my point.
And your explanation seems logic to me.
Thanks.

Anyway, I still feel this is very strange...
"a"[-1..-2] #=> ""
""[-1..-2] #=> nil

My Conclusion is : For any no empty string, it exists exactly string's length + 1 of empty substring!
(location does matter)

Example: for "ab", there are exactly 3 empty substrings locate at "^a^b^" (^ shows empty string position)

s="ab"; s[-1..-2]="xxx"; p s #==> s = "axxxb"
s="ab"; s[-2..-3]="xxx"; p s #==> s = "xxxab"
s="ab"; s[1..0]="xxx"; p s #==> s = "axxxb", it is the same as s[-1..-2]
s="ab"; s[2..1]="xxx"; p s #==> s = "abxxx"

As you can see, there are exactly 3 empty substrings on "ab". (and you can re-assing) :wink:

cheer.

···

Hi, Ara!

I understand what you mean.
However, the return values should be consistent even if the range object
doesn't make sense.

> > s[-1..-2] #=> ""
> > s[-1..-3] #=> nil
How would you explain the inconsistency?

The only explanation I can think of is:

s[-1..-1] #=>"9"
s[-1..-2] #=>"", because one step back, one less character...
s[-1..-3] #=>nil, because there's no "less character" concept beyond empty
string.

Sam

_________________________________________________________________
Don’t just search. Find. Check out the new MSN Search! http://search.msn.click-url.com/go/onm00200636ave/direct/01/

D T wrote:

OK. You got my point.
And your explanation seems logic to me.
Thanks.

Anyway, I still feel this is very strange...
"a"[-1..-2] #=> ""
""[-1..-2] #=> nil

My Conclusion is : For any no empty string, it exists exactly string's length + 1 of empty substring!
(location does matter)

Example: for "ab", there are exactly 3 empty substrings locate at "^a^b^" (^ shows empty string position)

s="ab"; s[-1..-2]="xxx"; p s #==> s = "axxxb"
s="ab"; s[-2..-3]="xxx"; p s #==> s = "xxxab"
s="ab"; s[1..0]="xxx"; p s #==> s = "axxxb", it is the same as s[-1..-2]
s="ab"; s[2..1]="xxx"; p s #==> s = "abxxx"

As you can see, there are exactly 3 empty substrings on "ab". (and you can re-assing) :wink:

This is the most logical analysis of this issue that I remember
seeing. Thank you for that.

And also IMO it's the best justification for this behavior -- after
all, "before the beginning" and "after the end" are valid locations
as far as insertion goes.

I now understand better what matz said long ago, about an imaginary
pointer in between the elements. I understand this better WRT insertion
than WRT accessing data.

Array subranges work much the same way, I believe, correct?

Hal