2012-02-12 20 views
1

文字列の特定の部分を返すためにStr [fixnum]を使用しようとしています。Str [fix_num]が間違った結果をもたらす理由

# Given 
Str = "James" 

Str[0] 
# Should yield `"J"'. 
# Instead its yielding `74`. 

奇妙なことは、それは誰もがここで起こっかもしれないものの任意のアイデアを持っています「J」

をもたらした昨日の夜です。関数がascii文字の数値を返す原因となった設定を誤って変更しましたか?私は困惑している。

更新:私は74が実際には "J"のアスキー番号表現であることを確認しました。だから問題は、実際の文字の代わりにasciiを返すことです。

答えて

4

String#[]引数には、iを引数として、ruby 1.8の整数としてiバイトを返します。 Ruby 1.9では、1文字の文字列を返します。

昨日試してみると、今日は1.8を使っているうちに、おそらくあなたは1.9のルビーを使っていたでしょう。

ruby​​ 1.8で1文字の文字列を取得するには、str[i, 1]を使用します。これは1.8と1.9で同じ動作をします。

+0

返信いただきありがとうございます。私はRuby 1.8.7を使っているようです。私はなぜルビのバージョンが一晩変わったのか分からない。私は昨日と同じレール・コンソールにいます。 – Mutuelinvestor

+1

RVMを使ってルビーを管理している場合は、.rvmrcファイルをプロジェクトディレクトリに置いて、適切なバージョンに(そして後で戻って)切り替えます。 –