Как расширить функцию модуля

Как расширить функцию модуля? В следующем я хочу использовать 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
Другие вопросы по тегам