2012-04-24 61 views
0

從IRB一些輸出有趣:類是一個模塊?

irb(main):001:0> Class.ancestors 
=> [Class, Module, Object, Kernel, BasicObject] 
irb(main):002:0> class Foo 
irb(main):003:1> end 
=> nil 
irb(main):004:0> module Foo 
irb(main):005:1> end 
TypeError: Foo is not a module 
     from (irb):4 
     from D:/Ruby193/bin/irb:12:in '<main>' 
irb(main):006:0> Foo.is_a? Module 
=> true 

根據類的定義,一類是派生模塊可被實例化。但是,IRB告訴我們,有時候這是一個模塊,有時它是不是...

回答

2

這裏的問題是,你已經創建了一個ClassFoo),現在正試圖重新定義它爲Module。不管類和模塊繼承的,你不能改變一個到另一個,或將它們

+0

我只是覺得它說的很有趣;) – texasbruce 2012-04-25 12:48:41

2

表達Foo.is_a? Class也返回true因爲is_a?返回true,不僅當類是對象的類,而且如果與「投」類是包含在對象中的對象或模塊的超類之一。