2016-04-26 85 views
0

模塊之間是什麼以下兩種包含語句的不同:目的::之前包括紅寶石

include ::Module1:Module2 

include Module1::Module2 

無論是在我的情況下工作。但是,我只是想知道哪一個更好(或者兩者都很好)。

+0

SymbolHound是你的朋友:http://symbolhound.com/?q=ruby+%3A%3A –

回答

0

調用::Module1::Module2將引用頂級命名空間,而不是執行語句的相對名稱空間。

這是在你試圖到另一個模塊中引用的頂層模塊,像這樣的情況非常有用:

class YourClass 
end 

module YourModule 
    class YourClass 
    end 

    def self.new_outer_class 
    ::YourClass.new 
    end 

    def self.new_inner_class 
    YourClass.new 
    end 
end 

通過以上的設置,調用#new_outer_class實際上實例YourClass類的實例在YourModule之外定義,而呼叫#new_inner_class將實例化YourModule::YourClass,因爲它與YourModule相關並且被呼叫。

希望有幫助!

+0

這是否意味着在我的情況下都可以互換? –

+0

在您的具體情況下,他們將有效地達到相同的結果。然而,使用':: Module1 :: Module2'會在'Module1'之上添加另一個名稱空間級別。 – Zoran