如何在Ruby中的另一个模块中调用定义在一个模块中的方法?

4

考虑以下示例:

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个回答

7
假设您不想使用类级别的方法,您也可以将模块包含到一个类中,实例化该类的对象并调用whoa:
class C
   include A::B
end

c = C.new
c.whoa
# Whoa!

6

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

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接