Вызов выбранных методов модуля из другого модуля - PullRequest
0 голосов
/ 15 апреля 2019

Я определил метод в модуле A. Я хочу вызвать тот же метод из модуля B

module A
  included do
    def self.some_func
    end
  end
end

module B
  some_func # It raise error (NoMethodError: undefined method). How solve this?
end

module C
  include A
  include B
end

Это не работает. Можно ли вызвать функцию, определенную одним модулем в другом модуле?

1 Ответ

2 голосов
/ 15 апреля 2019

То, что module A должно повышать ArgumentError, если у него также нет extends ActiveSupport::Concern наверху. Без ActiveSupport::Concern вы бы вызывали метод экземпляра Module#included здесь:

included do
  ...
end

но для этого нужен аргумент.

Если вы скажете это:

module A
  extend ActiveSupport::Concern
  included do
    def self.some_func
    end
  end
end

тогда вы получите included, который вы пытаетесь использовать, и module A, который вы ожидаете.

Кроме того, module B не include A, поэтому ему некуда взять some_func, поэтому:

module B
  some_func
end

даст вам NoMethodError. Если вы включите A:

module B
  include A
  some_func
end

тогда будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...