来自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告诉我们,有时它是一个模块,有时它不是......
答案 0 :(得分:2)
此处的问题是您创建了Class
(Foo
),现在正尝试将其重新定义为Module
。无论类和模块的继承如何,您都不能将一个更改为另一个,或者在它们之间“转换”
答案 1 :(得分:2)
表达式Foo.is_a? Class
也返回true
,因为is_a?
不仅在class是对象的类时返回true,而且如果class是object中包含的对象或模块的超类之一,则返回true。