2009-09-07 5 views
5

Ruby(1.8.X)なぜObjectはカーネルを含み、Rubyでそれを継承しているのですか?

なぜObjectはカーネルを継承してインクルードするのですか?十分に継承するだけではないでしょうか?状況は似た(ただし、ビットクリーナー)でのRuby 1.9で

 
irb(main):006:0> Object.ancestors 
=> [Object, Kernel] 
irb(main):005:0> Object.included_modules 
=> [Kernel] 
irb(main):011:0> Object.superclass 
=> nil 

注:

 
irb(main):001:0> Object.ancestors 
=> [Object, Kernel, BasicObject] 
irb(main):002:0> Object.included_modules 
=> [Kernel] 
irb(main):011:0> Object.superclass 
=> BasicObject 
irb(main):011:0> BasicObject.superclass 
=> nil 
irb(main):011:0> BasicObject.included_modules 
=> [] 

答えて

12

ObjectKernelから継承していない、それは(ルビー1.8で)最後のスーパークラスです。 #ancestorsの方法の結果は、スーパークラスおよびのモジュールを含みます。具体的には、特定のコールを検索する順番で指定します。

+2

ボトムライン、先祖、スーパークラスは混同しないでください –

5

モジュールをクラスに含めると、モジュールは継承階層の一部になります。したがって、Kernel Object.ancestorsを組み込むことで、カーネルを(意図しない)カーネルに含めます。ルビバージョンで< 1.9オブジェクトが階層の最上位にあるため、スーパークラスを持たない

関連する問題