Что такое 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 — для расширения функциональности классов.

Уровень

  • Рейтинг:

    3

  • Сложность:

    7

Навыки

  • Ruby

Ключевые слова

Подпишись на Ruby Developer в телеграм