のデフォルトの実装は、のデフォルトの実装をinspect呼び出します。これは、ドキュメントto_sに示されているように、オブジェクトの16進値を直接表示します(メソッドの説明をクリックしてソースを表示します)。Object#to_s
一方、の実装の基礎となるCソースのコメントは、object_idオブジェクトのタイプに応じて、Ruby値とオブジェクトIDに異なる「名前空間」があることを示しています(たとえば、Fixnum以外のすべての最下位ビットはゼロのようです)。Object#object_id あなたはドキュメントでそれを見ることができます(ソースを明らかにするためにクリックしてください)。
そこから、「オブジェクトIDスペース」(によって返されるobject_id)では、オブジェクトのIDは右側の2番目のビット(最初のビットはゼロ)から始まりますが、「値スペース」(によって使用されるinspect)では、オブジェクトのIDが始まります。右側の3番目のビットから(最初の2ビットはゼロ)。したがって、値を「オブジェクトIDスペース」から「値スペース」に変換するobject_idには、を1ビット左にシフトして、次のように表示されるのと同じ結果を得ることができますinspect。
> '%x' % (36971870 << 1)
=> "4684abc"
> a = Foo.new
=> #<Foo:0x5cfe4>
> '%x' % (a.object_id << 1)
=> "5cfe4"