2015-10-20 101 views
0

我有一個主模塊LatexCurriculumVitae:未初始化的常量LatexCurriculumVitae

module LatexCurriculumVitae 
    LatexCurriculumVitae::Email.create_email_smtp('Heribert Hunz', '[email protected]', 'Feger', 'male', 'no', 'yes') 
end 

另外一個

module LatexCurriculumVitae::Email 
    def self.create_email_smtp(contact, emailaddress, jobtitle, contact_sex, proactive, letter) 
    [...] 
end 

如果我運行主模塊我得到:

未初始化的常量LatexCurriculumVitae( NameError)

但是發生?

回答

1

定義與嵌套在模塊文件的方法:

module LatexCurriculumVitae 
    module Email 
    def self.create_email_smtp(contact, emailaddress, jobtitle, contact_sex, proactive, letter) 
    [...] 
    end 
    end 
end 

與雙冒號定義它,因爲外模塊先前沒有定義將失敗。

當你想調用的方法,你不需要包裝在一個模塊塊:

LatexCurriculumVitae::Email.create_email_smtp('Heribert Hunz', '[email protected]', 'Feger', 'male', 'no', 'yes') 
+0

感謝您的工作:-) –

0

FYI

module B 
    def self.print 
    puts 'its outer B print' 
    end 
end 

module A 
    def self.get_print_of_inner_B 
    B.print 
    end 

    def self.get_print_of_outer_B 
    ::B.print 
    end 
end 


module A::B 
    def self.print 
    puts 'its inner B of A print' 
    end 
end 

當您在IRB粘貼上面的代碼,你得到

2.2.1 :01 > A.get_print_of_inner_B 
its inner B of A print 
=> nil 
2.2.1 :02 > A.get_print_of_outer_B 
its outer B print 
=> nil 

結論:
::B.print這裏,::用於訪問定義在全局/外部範圍內的constants而不是當前的module/class

相關問題