如何扩展模块功能

时间:2012-03-03 22:22:07

标签: ruby module

扩展模块功能的方法是什么?在下文中,我想使用B.foo

module A
    module_function
    def foo; end
end
module B
    extend A
end
B.foo

但它返回错误:

private method `foo' called for B:Module.

2 个答案:

答案 0 :(得分:2)

如果你想直接使用它,你也需要公开它。

module A
  module_function
  public
  def hello
    puts "Hello"
  end
end

module B
  extend A
end


B.hello

答案 1 :(得分:1)

来自documentation:“实例方法版本是私有的。”

通过扩展模块B,您已将函数foo添加到对象B。这是因为在ruby模块中也是一个对象。您可以通过以下方式进行检查:

B.respond_to?(:foo,true) #=> true