2012-03-23 13 views
4

Rubyシンボルをエラーなく整数に型キャストできます。 だから:a.to_iは合法です。私はこの整数の意味が何であるか疑問に思っていました。それはそのシンボル固有の固有の値ですか?Rubyシンボルを整数に変換する

+0

':a.to_i'は私のために' irb'とRailsコンソールでエラーを投げます。どのように成功しているのかは分かりません。 –

答えて

11

Ruby 1.9でSymbol#to_iが削除されたため、これは今後互換性がないため、これを行うべきではありません。それにかかわらず、docs say this about it

プログラムの特定の実行内で一意の整数を返します。

どちらもC関数SYM2ID()を呼び出す終わるように、それは、シンボルをobject_idを呼び出すこととほぼ等価です。

+0

ありがとう、アンドリュー。私にとって、これはGoogleの深いリンクに続く危険の教訓でした:-)私はhttp://corelib.rubyonrails.org/classes/Symbol.htmlへのリンクを投稿しようとしていました。これはto_iが生きて蹴っていることを示しています。そのページ上(またはURL内)のどこにでもRuby 1.8.4(!)のドキュメントがあります。 Ruby * docではなくROR(URLが示すように)です。 Ruby 1.8.4用のサイトであることを確認するには、ルートに移動してタイトルを確認する必要があります。だから、教訓は学んだ。 Googleの深いdocリンクをフォローしているときは、あなたが探しているドキュメントのバージョンを確認してください。 –

3

1.8.xのシンボルは、即時オブジェクトです。彼らの実装は高速で、ほとんどの場合、ほとんどありませんでした。しかしそれに伴い、ガベージコレクションの不足に関するセキュリティ上の懸念が生じました。

#to_iおよび#to_intのメソッドは一意の整数を返し、内部実装に関連していました。

シンボルは即値として、暗黙的および明示的な整数変換はすべて1.9.xで削除されました。もちろん、object_idを入手することができます。興味深いのは、1.8.x to_iobject_idが同じ番号を返さなかったことです。

関連する問題