2016-10-30 39 views
0

在Ruby的Comparable模塊的文檔中,代碼示例(位於this page的頂部)有include Comparable訪問Ruby核心對象時需要include嗎?

My understanding是任何對象,它是 Ruby內核不需要被「列入」或「需要」。由於Comparable模塊的文檔頁面在其URL中包含core-2.2.3,因此該模塊似乎位於Ruby內核中。

所以基本上,爲什麼include這裏需要?

+0

因爲您在類定義中包含模塊。它不像其他語言的'import' - 包含'修改正在定義的類。 –

+0

看來你似乎混淆了包含一個模塊並需要一個庫。 – sawa

回答

0

是的包含是必要的,這是爲什麼。 Comparable模塊是一個混合模塊,意思是它包含的方法允許其他類使用自己的方法,而不必成爲其他類的超類/父類。

那麼特定類如何獲得mixin功能是通過包含它而不是直接繼承Comparable類。在OOP這通常是爲了避免單個類的多重繼承。

+0

Gotcha。這就說得通了。作爲一個後續問題,雖然......爲什麼在創建一個使用Ruby Core的內置'String'類的類時,我不必'包含String'(例如)。我只是想把我的大腦包裝在什麼時候使用'include',而當這樣做的時候不是必需的。 – filmnut

+0

@filmnut String類是一個實際的對象,它繼承自'Object'類,它大部分的核心類都是在ruby中繼承的。上面的類('Comparable')是一個模塊,所以它沒有父類。所以,如果你在類中包含「Comparable」模塊,你將可以訪問自定義類中的所有方法。 – coletrain

+0

@filmnut使用'String'很好,字符串本身就是實際的對象。而且你並不想把'String'的行爲加到你自己的模型上。即使你是你的子類,因爲它是一個實際的字符串。作爲助記符,試着記住'include SomeModule',將本質上包含模塊在當前類中的方法。 –

相關問題