なんで?

ruby 1.9.1p378 (2010-01-10 revision 26273) [i386-mingw32]にて。

class Object
  TEST1 = 1
  p ancestors # => [Object, Kernel, BasicObject]
end
module Kernel
  TEST2 = 2
  p ancestors # => [Kernel]
end

p Object.const_get("TEST1") # => 1
p Kernel.const_get("TEST1") # => 1 ←なんで?
p Object.const_get("TEST2") # => 2
p Kernel.const_get("TEST2") # => 2

ObjectはKernelをincludeしているから、Kernelに定義した定数が参照できるのはわかるが、Objectに定義した定数をKernelから参照できるのはどういうワケなんだろう。


(追記)

module Kernel
  p self.class # => Module
  p self.class.superclass # => Object
end

ということだ。
KernelはObjectから派生したModuleクラスのインスタンスであり、Objectが持つ定数を参照できる。
で、いいのかな。


参考。
Rubyソースコード完全解析の4章
http://www.loveruby.net/ja//rhg/book/class.html
yuguiさんのFlickerの図
http://www.flickr.com/photos/yugui/3572056169