Вопрос помогает понять, как подключать модули к классам или объектам и в чем различие между этими способами.
include добавляет методы модуля в экземпляры класса, тогда как extend добавляет их в сам класс. Это используется для разделения функциональности и повышения гибкости.
Ruby предоставляет два способа добавления функциональности модулями: include и extend.
include:
Добавляет методы модуля как методы экземпляров класса.
module Greet
def hello
"Hello!"
end
end
class Person
include Greet
end
person = Person.new
puts person.hello # => "Hello!"extend:
Добавляет методы модуля как методы самого класса.
module Greet
def hello
"Hello from the class!"
end
end
class Person
extend Greet
end
puts Person.hello # => "Hello from the class!"Разница:
include добавляет методы модуля в экземпляры класса, а extend — в сам класс (или объект).
include используется для поведения объектов, а extend — для поведения классов.
Вывод:
Модули с include часто применяются для миксинов, а с extend — для расширения функциональности классов.