2009-03-18 9 views

答えて

10

Ed Swangren:? 文字の文字コードを返します。

Ruby 1.9にはありません。 1.9現在、?aは 'a'を返します。ここを参照してください:Son of 10 things to be aware of in Ruby 1.9!

telemachus ~ $ ~/bin/ruby -v 
ruby 1.9.1p0 (2009-01-30 revision 21907) [i686-linux] 
telemachus ~ $ ~/bin/ruby -e 'char = ?a; puts char' 
a 
telemachus ~ $ /usr/bin/ruby -v 
ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux] 
telemachus ~ $ /usr/bin/ruby -e 'char = ?a; puts char' 
97 

編集:changes in Ruby 1.9非常に完全な説明を。

もう1つの編集:?aを使用して文字列を1.8に変換する場合は、'a'.ordを使用できるようになりました。

+0

私は「a」の代わりに「a」というだけの理由はありませんか? –

+0

irbの例をありがとう。この記事でもこの点が指摘されています。だから1.9では、?aはあなたに文字「a」を与えます。 'a'を得るのは、珍しく不必要に複雑な構文ではありません。なぜだけではない: 'a'? –

+0

だから、書き込む文字数は少なくなるでしょうか? それは理由でしょうか? –

5

この変更は、Ruby 1.9のUTF-8アップデートに関連しています。

?のRuby 1.8バージョンは、シングルバイト文字でのみ動作しました。 1.9では、マルチバイト文字を扱うためにすべてを更新しました。問題は、どの整数が?€から返されるべきかは不明です。

返すものを変更して解決しました。 1.9において、以下のすべてが単一要素の文字列であり、等価である:

?€ 
'€' 
"€" 
"\u20AC" 
?\u20AC 

彼らは行動を変える(多少ランダム)IMO、表記を落とし、なくておく必要があります。しかし、公式には非難されていません。

0

一部の言語(Pascal、Python)では、文字は長さ1の文字列です。

他の言語(C、Lisp)では、文字が存在し、 'x'や#\ xなどの特殊な構文を持っています。

Rubyはほとんどが "charsは存在しません"の側にありましたが、時にはこの選択肢が完全にはわからないようでした。 にすると、データ型としてcharが必要ですが、Rubyはすでに "と" "に意味を割り当てていますので、?xはcharリテラルの他のオプションと同じように見えます。

私にとっては、あなたが何を意味するのかということだけです。あなたはfoo [0] = 98と言うこともできますが、実際に文字を意味するときは整数を使用しています。文字を意味するときに文字列を使用すると、私にとっても同じように見えます。サポートする一連の操作はほぼ完全に異なります。 1つはもう一方のシーケンスです。 Math.sqrtに数字のリストを渡すことはできません。ちょうど最初のものを見るだけです。 「整数のリスト」をすでにサポートしているからといって、言語から「整数」を省略することはありません。

(実際には、Lisp 1.0はすべてのことについて教会の数字にすぎませんでしたが、パフォーマンスは非常に厳しいものでしたので、これは1962年に実際の言語として使用できるLisp 1.5の大きな進歩の1つでした。 )

関連する問題