0
該類具有超類Module,它具有超類Object,它具有超類BasicObject,它是Class的一個實例。而Class又是Module的一個子類。Ruby的類超類和子類結構
我真的很困惑對此。(以上是從使用上的每個上述對象的.class和.superclass方法收集)
誰能究竟給我解釋一下是怎麼回事?
該類具有超類Module,它具有超類Object,它具有超類BasicObject,它是Class的一個實例。而Class又是Module的一個子類。Ruby的類超類和子類結構
我真的很困惑對此。(以上是從使用上的每個上述對象的.class和.superclass方法收集)
誰能究竟給我解釋一下是怎麼回事?
「實例」這個短語是你需要在這裏做的心理體操的一小部分但是很重要的部分。
那個,和Class
類型的對象,以及一個叫Object
的類。
如果你能理解這些,至少在重複自己慢慢地,那麼你已經得到它:
Object.new
創建類對象的實例
Object
是一個參考類別對象,這本身就是類別的對象類別
Class
是參考類類,這也是類類的對象(!)
Class.new
創建類類的一個實例。
class Foo
Foo = Class.new(String)
是一樣一樣的class Foo < String; end
的Class
的類層次結構,Module
,Object
是一個實現Ruby中的細節。幾乎所有的課程都從Object
繼承,所以Class
也是如此。
其餘的只是反覆使用和經驗。
這裏值得注意的是:您鍵入的代碼中的標籤是符號/變量名稱,它們是指向具有類型和包含數據的底層對象的指針。沒有要求直接使用這些標籤,它們幾乎與任何其他Ruby變量相同:
o_klass = Object
o_instance = o_klass.new
o_instance.class
=> Object
你對什麼感到困惑?你的描述是正確的。你正確描述的是正在發生的事情。 – sawa
同時查看[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
我推薦由Ruby實體程序員在Ruby對象模型和元編程中使用ScreenCast系列: http://pragprog.com/screencasts/v-dtrubyom/the-ruby-object-model-and-metaprogramming – Tilo