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告诉我们,有时候是模块,有时候又不是……

4

2 回答 2

2

这里的问题是您创建了一个Class( Foo),现在正试图将其重新定义为Module. 无论类和模块的继承如何,您都不能将一个更改为另一个,或者在它们之间“转换”

于 2012-04-24T19:58:00.637 回答
2

该表达式Foo.is_a? Class也返回true,因为is_a?不仅当 class 是对象的类时返回 true,而且如果 class 是 object 的超类之一或 object 中包含的模块。

于 2012-04-24T20:15:52.983 回答