Как вызвать метод, определенный в одном модуле из другого модуля, когда они оба включены в класс в Ruby? - PullRequest
0 голосов
/ 03 ноября 2018
module A
  def before
    puts :before
  end
end

module B
  before
end

class Test
  include A
  include B
end

Итак, цель состоит в том, чтобы вызвать before при разборе модуля B без использования extend A в модуле B.

Рубин 2.5.1

1 Ответ

0 голосов
/ 03 ноября 2018

Когда вы include модуль, он принимает методы экземпляра модуля и импортирует их как методы экземпляра. Однако способ вызова метода before здесь будет работать только в том случае, если это был метод class .

Если вы хотите, чтобы B импортировал before как метод класса, вы можете сделать это с помощью extend:

module B
  extend A
  before
end

Без этого дополнительного extend вы могли бы вызывать before из B только в области видимости метода экземпляра и только в том случае, если метод в B был вызван Test:

module A
  def before
    puts :before
  end
end

module B
  def call_before
    before
  end
end

class Test
  include A
  include B
  def do_thing
    call_before
  end
end

Test.new.do_thing # => before
...