2013-07-03 44 views
3

考虑下面的例子:如何访问Ruby中另一个模块中的模块中定义的方法?

module A 
    module B 
    def whoa 
     puts 'Whoa!' 
    end 
    end 
end 

我如何可以访问方法?

1.9.3p392 :047 > A.B.whoa 
NoMethodError: undefined method `B' for A:Module 

1.9.3p392 :048 > A::B.whoa 
NoMethodError: undefined method `whoa' for A::B:Module 

1.9.3p392 :049 > A::B::whoa 
NoMethodError: undefined method `whoa' for A::B:Module 

这些方法似乎都行不通。

回答

7

假设你不想一流水平的方法,还可以包括模块插入一个类,实例化该类别的对象并致电whoa

class C 
    include A::B 
end 

c = C.new 
c.whoa 
# Whoa! 
5

您已将该方法定义为实例方法。如果你想使用的方法没有一个实例,它应该是在模块上一个类的方法:

module A 
    module B 
    def self.whoa 
     puts 'Whoa!' 
    end 
    end 
end 

1.9.3p327 :009 > A::B.whoa 
Whoa! 
=> nil 
相关问题