2009-04-05 8 views
4
char hello[] = "hello"; #C 
hello = ['h', 'e', 'l', 'l', 'o'] #Ruby 

Rubyでhello [0]のクラスを出力すると、 "String"と表示されます。これは、単一引用符付きのStringがRubyに存在し、char型の概念ではないように見えるためです。先日、私は同僚に文字の配列を持っていて、「いいえ、私には文字列があります」と言った。 Nitpicky、はい、しかし技術的にはおそらく彼は正しいです。 Cの世界から来て、私は文字列を文字列とみなさない傾向があります。上のhello配列は文字の配列ではなく文字列の配列であることに同意していますか?'c'はRubyの文字または文字列、あるいはその両方ですか?

答えて

13

Cでは、文字は文字列(文字の配列)とは区別されます。 Rubyには個々の文字タイプはありません。文字列は任意の数の文字を保持でき、Fixnumは文字のASCII値を保持し、#chrメソッドを使用してその文字を含む印字可能な文字列に変換できます。

Rubyでの一重引用符と二重引用符の構文の違いは、文字列に対してどの程度の前処理(補間など)が行われているかにあります。

2

あなたの同僚は正しいでしょう、Rubyにはどんな種類のCharacterクラスもないようです。

>> 'c'.class                
=> String 
0

はい、Rubyにはcharクラスはありません。Stringのみです。 (charはC標準では1バイトと定義されていますが、Unicode文字の場合はそうではありません)。

2

はい。 C言語では文字列はC-Stringで表されますが、これは基本的にゼロで終了する文字配列です。Rubyの文字列はその内容をより複雑な形で格納するクラスです。新しい文字列にその一部を抽出することができます。おそらくRubyはそれにアクセスしにくいでしょう。 Cでは、メモリに直接アクセスできるため、Rubyはそれよりもはるかに抽象的です。

関連する問題