Шрифт:
Если написанная вами реализация
11.3.13. Отслеживание изменений в определении класса или объекта
А зачем, собственно? Кому интересны изменения, которым подвергался класс?
Одна возможная причина — желание следить за состоянием выполняемой программы на Ruby. Быть может, мы реализуем графический отладчик, который должен обновлять список методов, добавляемых «на лету».
Другая причина: мы хотим вносить соответствующие изменения в другие классы. Например, мы разрабатываем модуль, который можно включить в определение любого класса. С момента включения будут трассироваться любые обращения к методам этого класса. Что-то в этом роде:
Он должен работать также для всех подклассов трассируемого класса:
Возможная реализация такого модуля показана в листинге 11.18.
В этом коде два основных метода. Первый,
Обратите внимание на использование конструкции