Как расширить функцию модуля
Как расширить функцию модуля? В следующем я хочу использовать 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 ответа
Решение
Если вы хотите использовать его напрямую, вам также необходимо сделать его публичным.
module A
module_function
public
def hello
puts "Hello"
end
end
module B
extend A
end
B.hello
Из документации: "Версии метода экземпляра делаются закрытыми".
Расширив модуль B, вы добавили функцию foo
для объекта B
, Это связано с тем, что в ruby модуль также является объектом. Вы можете проверить это следующим образом:
B.respond_to?(:foo,true) #=> true