Как расширить функцию модуля - PullRequest
0 голосов
/ 04 марта 2012

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

2 голосов
/ 04 марта 2012

Если вы хотите использовать его напрямую, вам также необходимо сделать его публичным.

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

module B
  extend A
end


B.hello
1 голос
/ 04 марта 2012

Из документации : "Версии метода экземпляра делаются закрытыми."

Расширяя модуль B, вы добавили функцию foo к объекту B. Это связано с тем, что в ruby ​​модуль также является объектом Вы можете проверить это следующим образом:

B.respond_to?(:foo,true) #=> true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...