Correct to my previous conclusion. The empty string, itself, does have one and only one empty substring too. And the empty string case is even more strange... List all what I found here: 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", same case as s[-1..-2] s="ab"; s[2..1]="xxx"; p s #=> s = "abxxx" "ab"[3..2] #=> nil "ab"[-3..-4] #=> nil empty string case: (only 1 empty substring) ""[-1..-2] #=> nil ""[-1..0] #=> nil ""[1..2] #=> nil ""[0..-1] #=> "" ""[0..1] #=> "" ""[0..2] #=> "" ""[0..3] #=> "" ""[0..4] #=> "" ""[0..5] #=> "" ... etc (All empty substring of empty string is the same, you could re-assing to see it) >From: Hal Fulton <hal9000 / hypermetrics.com> >Reply-To: ruby-talk / ruby-lang.org >To: ruby-talk / ruby-lang.org (ruby-talk ML) >Subject: Re: substring by range parameter (bug?) >Date: Thu, 22 Jul 2004 07:19:40 +0900 > >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 > > _________________________________________________________________ Planning a family vacation? Check out the MSN Family Travel guide! http://dollar.msn.com