[#1263] Draft of the updated Ruby FAQ — Dave Thomas <Dave@...>

33 messages 2000/02/08

[#1376] Re: Scripting versus programming — Andrew Hunt <andy@...>

Conrad writes:

13 messages 2000/02/15

[#1508] Ruby/GTK and the mainloop — Ian Main <imain@...>

17 messages 2000/02/19
[#1544] Re: Ruby/GTK and the mainloop — Yasushi Shoji <yashi@...> 2000/02/23

Hello Ian,

[#1550] Re: Ruby/GTK and the mainloop — Ian Main <imain@...> 2000/02/23

On Wed, Feb 23, 2000 at 02:56:10AM -0500, Yasushi Shoji wrote:

[#1516] Ruby: PLEASE use comp.lang.misc for all Ruby programming/technical questions/discussions!!!! — "Conrad Schneiker" <schneiker@...>

((FYI: This was sent to the Ruby mail list.))

10 messages 2000/02/19

[#1569] Re: Ruby: constructors, new and initialise — Yukihiro Matsumoto <matz@...>

The following message is a courtesy copy of an article

12 messages 2000/02/25

[ruby-talk:01634] Re: ruby <=> python

From: Mirko Nasato <mirko.nasato@...>
Date: 2000-02-29 22:40:45 UTC
List: ruby-talk #1634
On 28 Feb 2000, Quinn Dunkan wrote:
> 
> Comments by yashi and gotoken:
> 
> > > Characters are integers in ruby.
> > > 'hello'[0]  -> 104
> > 
> > no, there is only String class. all char is an instance of class
> > String.  And, [] is a method in class String to get _char code_.
> 
> Ok, so it would have been more accurate to say:
> Indexing a string in ruby gives you an Integer.
> 
> I'm still not clear on why this is the case, or how it's useful.  A few other
> languages:
> python:     string[0]   -> StringType
> C:          stringp[0]  -> char
> haskell:    string !! 0 -> Char
> smalltalk:  string at: 1 -> Character
> In perl, strings are not sequences and can't be indexed, so you have to use
> substr, which gives a string.
> ruby:       string[0]   -> Fixnum
> 
> The other languages approaches seem more intuitive.
>
I agree, i have found Ruby's approach on this a bit strange. Coming mainly
from Python, i was surprised to get

  'hello'[0] == 'h'      # => false

and to have to write one of the following

  'hello'[0].chr == 'h'  # => true
  'hello'[0,1] == 'h'    # => true
  'hello'[0] == ?h       # => true

("?h" is the ASCII code notation, explained under "Numeric Literals" in the
Reference Manual.)

I'm getting used to it, but i still prefer Python's approach.  When i index 
a string, or iterate over a string, i usually want a 1-sized string, and not
a number.

Maybe we still see things from a Pythonic perspective.  Anyway, this is a
point to stress in your Python to Ruby conversion guide! ;-)

> For example, in the haskell prelude:
> type String = [Char]    -- strings are lists of characters
> 
> So why doesn't ruby have a Char class?
> 
What methods should a Char class provide?

> > If I may add, "hello"[0].chr == "h".  Note that String object is not
> > always a character string, String can represent a octet (byte) string. 
> 
> Well, that's because Integers happen to respond to the chr message, it's still
> an Integer ('hello'[0].type -> Fixnum).  Hmm, I think String objects *are*
> always character strings, I think what you mean is that they are not always
> *printable* character strings :)  But that's not for the language to decide,
> whether or not it's printable depends on your character set, and neither has
> any bearing on what [] should return.  If I index a binary string, I still
> wouldn't expect to get a fixnum, since if I slice 4 elements I don't get a
> 32-bit int, but a string.
> 
The String class has a each_byte method, which (from the Reference Manual)
"iterates over each character of the string".

So, a character and a byte seems to be the same thing.  As in C, after all.

Ciao.

-- Mirko Nasato

In This Thread