如何扩展模块功能

问题描述:

扩展模块功能的方法是什么?下面,我想用B.foo如何扩展模块功能

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

但它返回的错误:

private method `foo' called for B:Module. 

如果你想使用它直接,你需要把它公开为好。

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

module B 
    extend A 
end 


B.hello 

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

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

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