なんで?
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