如何扩展模块功能
问题描述:
扩展模块功能的方法是什么?下面,我想用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