Что такое include и extend и в чем разница между ними?
Вопрос помогает понять, как подключать модули к классам или объектам и в чем различие между этими способами.
Короткий ответ
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 — для расширения функциональности классов.