web-dev-qa-db-ja.com

ASCIIの文字コードをRubyを使用して `?`(疑問符)を使用すると失敗する

私はASCII文字の値( プロジェクトオイラーの質問#22 、具体的に取得したい場合))が必要な状況にいます。問題に直面しています。

Rubyが初めてなので、グーグルで調べて、_?_が行く方法であることがわかりました:_?A_または何でも。しかし、それをコードに組み込むと、そのステートメントの結果は文字列_"A"_になります。文字コードはありません。 _[0]_とslice(0)についても同じ問題があり、どちらも理論的にASCIIコードを返すはずです。

私が考えることができる唯一のことは、これはRubyバージョンの問題です。私は1.9.1-p0を使用しています。今日の午後1.8.6からアップグレードしました。同じディレクトリにあるRubyの作業バージョンでは、.Zipファイルにバンドルされていないファイルが既にあるので、ダウンロードしませんでした。

では、なぜすべてのASCIIコードが実際の文字に変換されるのですか?

49
dorr

1.9以前のRubyでは、文字の扱いに多少の一貫性がありませんでした。 ?aおよび"a"[0]は、文字のASCII値(通常は人々が探している動作ではありませんでした))を表す整数を返しますが、実際の使用では、文字は通常1文字の文字列で表されます。 Ruby 1.9、文字が不可解に整数に変換されることはありません。文字のASCII値を取得する場合は、ordメソッドを使用できます、 お気に入り ?a.ord(97を返します)。

70
Chuck

どう?

"a"[0].ord

1.8/1.9ポータビリティ用。

35
Ryan Calhoun

1.8および1.9の場合

?a.class == String ? ?a.ord : ?a

または

"a".class == String ? "a".ord : "a"[0]
12
mark

ソリューションを見つけました。 「string」.ordは、sのASCIIコードを返します。 Rubyの1.9シリーズでは、見つけたメソッドが壊れているようです。

8
dorr

Rubyプログラミング/ ASCII

以前のRuby 1.9より前のバージョンでは、疑問符構文を使用できます。

?a

1.9以降、代わりにordを使用します。

'a'.ord    
7
hiveer