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) ;-) 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ÃÕ just search. Find. Check out the new MSN Search! http://search.msn.click-url.com/go/onm00200636ave/direct/01/