扩展模块功能的方法是什么?在下文中,我想使用B.foo
module A
module_function
def foo; end
end
module B
extend A
end
B.foo
但它返回错误:
private method `foo' called for B:Module.
答案 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