我正在尝试使用Module的模块比较功能。考虑代码:
module Mod
module Mod2
end
end
module ModExtend
extend Mod
end
puts (Mod<Mod::Mod2).nil? # Prints "true"
puts (Mod<ModExtend).nil? # Prints "true"
我希望Mod<Mod::Mod2
返回false
而不是nil
.
来自Module#<
如果 mod 是 other 的子类,则返回 true。如果两者之间没有关系,则返回 nil。(考虑类定义的关系:“类 A<B”意味着“A<B”)。
现在我们观察模块祖先
Mod.ancestors # [Mod]
Mod::Mod2.ancestors # [Mod::Mod2]
ModExtend.ancestors # [ModExtend]
如您所见,它们之间没有祖先关系。
然而,一个模块定义为:
module Mod3
include Mod
end
给出:
Mod3 < Mod # true
Mod3.ancestors # [Mod3, Mod]
根据文档false
,永远不会返回Module#<
. 然而,nil
是一个假值(它的行为类似于false
布尔表达式:) !nil #-> true
。