2015-10-20 76 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

相关问题