Когда вы 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