我正在尝试使用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
。
答案 0 :(得分:1)
来自Module#<
的ruby文档如果mod是other的子类,则返回true。如果没有,则返回nil 两者之间的关系。 (想想这种关系 类定义:“A类&lt; B”表示“A&lt; 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
)。