班级是一个模块?

时间:2012-04-24 19:52:11

标签: ruby

来自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 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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