如何访问Ruby中另一个模块内的模块中定义的方法?

时间:2013-07-03 15:03:38

标签: ruby methods module include nomethoderror

给出以下示例:

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

如何访问 whoa 方法?

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

这些方法似乎都不起作用。

2 个答案:

答案 0 :(得分:7)

假设您不需要类级方法,您还可以将模块包含到类中,实例化该类的对象并调用whoa

class C
   include A::B
end

c = C.new
c.whoa
# Whoa!

答案 1 :(得分:5)

您已将方法定义为实例方法。如果要在没有实例的情况下使用该方法,则它应该是模块上的类方法:

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

1.9.3p327 :009 > A::B.whoa
Whoa!
 => nil