Brian Candler wrote:
> On Tue, Apr 24, 2007 at 02:40:09AM +0900, Michael W. Ryder wrote:
>> I guess my point was that str[i] behaves totally different from all the 
>> other implementations of [].  All of the others return a string.
> 
> You clearly know a lot of languages then :-)
> 

I probably should have phrased that differently.  What I meant that all 
of the other implementations of [] in Ruby for the String class return a 
string, only str[i] returns a number.

> As pointed out before, in C, str[i] is an expression whose value is an
> integer for the character at position i, exactly as in Ruby.
> 
> In Perl, it doesn't do what you expect either:
> 
> $ perl -e '$a = "abcde"; print $a[2], "\n";'
> 
> $
> 
> (what this actually does is extract an element from the array @a, which I
> have not initialised, and is completely unrelated to the scalar $a)
> 
>> In Business Basic or C if I want the numeric value of a character in a 
>> string I specify that.  Likewise if I want to copy a string from an 
>> arbitrary position I don't have to specify an ending character like 
>> Ruby.  I just find s = t[i, -1] to be much harder to understand in a 
>> quick read then s = t[i].  Others may not have this problem.
> 
> Personally I would be *very* surprised if str[i] returned all the characters
> from 'i' to the end of the string. But then I don't program in Business
> Basic.
> 
Business Basic has been doing this for over the 25 years I have been 
programming in it.  For example if I enter: A$="abcdefg" and then say: 
Print A$(3) it prints cdefg.  Like Ruby, if I enter B$=A$(3,3) B$ 
contains cde.  Other than the beginning number of the string they act 
the same.

> I do program in C though. If I wanted the string from position i to the end
> of the string, I would write str + i, or possibly &str[i]
> 

But you do not have to provide a length or ending position for the copy 
which was part of my confusion.  I specify a starting position and the 
language copies the rest of the string.  In Ruby just providing a 
starting position gives me a numeric value.


> In Perl you have to be explicit and call substr()
> 
> Brian.
>