2009-09-07 43 views
5

In Ruby(1.8.X)爲什麼Object既包含內核又在Ruby中繼承它?

爲什麼Object既繼承Kernel又包含它?不僅繼承就夠了嗎?

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

注意,在Ruby 1.9的情況也類似(但有點清潔劑):

 
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

Object不從Kernel繼承,這是最後的超類(在Ruby中1.8)。方法#ancestors的結果包括超類包括的模塊。具體來說,按順序查找任何特定的電話。

+2

底線,祖先和超類不會混淆 – 2009-09-08 00:59:02

5

當你在一個類中包含一個模塊時,它就成爲它的繼承層次結構的一部分。因此,通過包含內核Object.ancestors將包含(不是雙關語)內核。在紅寶石版本< 1.9對象是在層次結構的頂部,所以它沒有超類

相關問題