2013-07-30 80 views
0

該類具有超類Module,它具有超類Object,它具有超類BasicObject,它是Class的一個實例。而Class又是Module的一個子類。Ruby的類超類和子類結構

我真的很困惑對此。(以上是從使用上的每個上述對象的.class和.superclass方法收集)

誰能究竟給我解釋一下是怎麼回事?

+0

你對什麼感到困惑?你的描述是正確的。你正確描述的是正在發生的事情。 – sawa

+1

同時查看[Class SuperClass Paradox](http://stackoverflow.com/questions/10558504/can-someone-explain-the-class-superclass-class-superclass-paradox)和[Ruby Metaclass Confusion](http:///stackoverflow.com/questions/10525053/ruby-metaclass-confusion)。 – coreyward

+0

我推薦由Ruby實體程序員在Ruby對象模型和元編程中使用ScreenCast系列: http://pragprog.com/screencasts/v-dtrubyom/the-ruby-object-model-and-metaprogramming – Tilo

回答

0

「實例」這個短語是你需要在這裏做的心理體操的一小部分但是很重要的部分。

那個,和Class類型的對象,以及一個叫Object的類。

如果你能理解這些,至少在重複自己慢慢地,那麼你已經得到它:

  • Object.new創建類對象的實例

  • Object是一個參考類別對象,這本身就是類別的對象類別

  • Class是參考類,這也是類類的對象(!)

  • Class.new創建類的一個實例。

    • 這是當你寫的引擎蓋下會發生什麼部分class Foo
    • 其實Foo = Class.new(String)是一樣一樣的class Foo < String; end
  • Class的類層次結構,ModuleObject是一個實現Ruby中的細節。幾乎所有的課程都從Object繼承,所以Class也是如此。

其餘的只是反覆使用和經驗。

這裏值得注意的是:您鍵入的代碼中的標籤是符號/變量名稱,它們是指向具有類型和包含數據的底層對象的指針。沒有要求直接使用這些標籤,它們幾乎與任何其他Ruby變量相同:

o_klass = Object 
o_instance = o_klass.new 
o_instance.class 
=> Object