2013-07-30 18 views
0

我在嘗試使用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

回答

1

Module#<

返回true Ruby文檔;如果mod是其他子類。如果兩者之間沒有 關係,則返回零。 (想想按類別定義 的關係:「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)。

+0

好的,所以缺少的是我需要包含父模塊被視爲「子類」。謝謝! –