On Apr 22, 2007, at 10:35 PM, Michael W. Ryder wrote:
> Roland Crosby wrote:
>> On Apr 22, 2007, at 10:00 PM, Michael W. Ryder wrote:
>>> Was there a reason the string class was implemented with str[i]  
>>> returning the code of position i in str?  The reason I ask this  
>>> is that in other languages str[i] returns the string starting at  
>>> position i. For example C uses t = strcpy(str[i]) and Business  
>>> Basic uses S$=T$(I) to copy a string from position i.
>>> I can see no way to do this in Ruby other than using something  
>>> like: t = str[i,9999].  It seemed strange that copying ranges of  
>>> strings uses the same format as C (t =strncpy(str[i],n)) but not  
>>> when copying the remainder.
>> Try str[i,-1], or one of the myriad other ways to access ranges of  
>> a string as defined in String#[]
> If I enter:
> 	a = "This is a test."
> 	b = a[1, -1]
> 	puts b
> irb returns nil.  Obviously this is not what I want.  If instead of  
> -1 I use 9999 it returns "his a test." which is what I was looking  
> for.  This seems like a kludge and an inconsistency.  Like I  
> pointed out other languages just use b = a[1] to get the remainder  
> of the string instead of 104.  The string class already has methods  
> like each_byte for converting characters in a string to a number,  
> so why does it need another shortcut for something that is probably  
> very rarely used.

Sorry, I meant a[1..-1] rather than a[1,-1]. I don't know why Ruby  
returns the character codes like that, but for what it's worth, I  
believe Ruby 1.9 is going to switch to returning a single-character  
string when you put one integer in String#[].