From: Hal Fulton Date: 2004-07-22T07:19:40+09:00 Subject: Re: substring by range parameter (bug?) 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) ;-) 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