3

给定以下示例:

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

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

4

2 回答 2

7

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

class C
   include A::B
end

c = C.new
c.whoa
# Whoa!
于 2013-07-03T15:08:29.360 回答
5

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

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

1.9.3p327 :009 > A::B.whoa
Whoa!
 => nil
于 2013-07-03T15:06:44.097 回答