Ruby2.0でnil.object_idの値が4から8に変わった理由

こんにちは、hachi8833です。 BigBinaryシリーズ、今回はあえて2008年のRuby記事を元に検証してみました。当時と状況がいろいろと変わっていることがわかりました。この記事は元記事の要点の翻訳と、それについての考察の2つで構成されています。 RailsコンソールでActiveRecordモデルを適当に#new.methodsすると既存のメソッド一覧を取れますが、昔のRailsではその中の#idがRuby 1.xの#id(現在の#object_idに相当)とかぶっていたのでwhiny_nilsオプションで対応していたことを知りました。 普段気にすることもないnilオブジェクト内部のobject_idの値がむき出しで返ってきたらびっくりしますね。詳しくは本文をお読みください。 参考: Rails 4.0.0.beta1で使わない方がよさそうなDBのカラム名 元記事 Why the id of nil is 4 in Ruby(米国BigBinary社のブログより) 参考: HackerNewsの過去記事のコメント: Ask Matz: why the id of nil is 4? (bigbinary.com) 元記事の逐次翻訳ではありませんのでご了承ください。本記事タイトルも検証内容を踏まえて元記事から変更いたしました。 別記事について 元記事を下敷きにした本記事とは別に、whiny_nilsについて検証しました。 別記事: Rails4でwhiny_nilsオプションが廃止された理由 1. RubyのnilのオブジェクトIDが4である理由(元記事より) 環境: Ruby 1.8.7とRails 2.3 Rails開発中に以下のようなメッセージが表示されることがよくあります。 Called id for nil, which would mistakenly be 4 — if you really … Continue reading Ruby2.0でnil.object_idの値が4から8に変わった理由