Что такое хуки и зачем их используют (inherited, included, method_added, singleton_method_added, method_missing)?
Этот вопрос проверяет знание механизмов, которые позволяют реагировать на изменения в структуре классов и объектов.
Короткий ответ
Хуки — это специальные методы, которые автоматически вызываются при определённых событиях в программе, таких как наследование или добавление методов. Они помогают контролировать и расширять поведение классов.
Длинный ответ
Ruby предоставляет хуки для реагирования на изменения:
inherited: Вызывается, когда класс наследуется от другого.
class Parent
def self.inherited(subclass)
puts "#{subclass} наследует от #{self}"
end
end
class Child < Parent; end
# => "Child наследует от Parent"
included: Вызывается, когда модуль подключается через include.
module A
def self.included(base)
puts "#{base} подключил #{self}"
end
end
class B
include A
end
# => "B подключил A"
method_added: Вызывается при добавлении нового метода в класс.
class MyClass
def self.method_added(method_name)
puts "Добавлен метод #{method_name}"
end
def my_method; end
end
singleton_method_added: Вызывается при добавлении singleton-методов.
method_missing: Обрабатывает вызовы несуществующих методов.
class MyClass
def method_missing(name, *args)
puts "Метод #{name} не найден"
end
end
obj = MyClass.new
obj.unknown_method # => "Метод unknown_method не найден"
Хуки — мощный инструмент для создания гибкого и расширяемого кода, особенно в библиотеках и фреймворках.