Программирование на языке Ruby
Шрифт:
Отметим, что фактически добавлено три метода. Возможно, это противоречит вашим ожиданиям, но метод
Метод
Можно также следить за добавлением методов экземпляра модуля к объекту (с помощью метода
Обращение к
11.3.14. Определение чистильщиков для объектов
У классов в Ruby есть конструкторы (методы
Однако тем, кто переходит на Ruby с таких языков, как C++, этот механизм представляется необходимым — часто задается вопрос, как написать код очистки уничтожаемых объектов. Простой ответ звучит так: невозможно сделать это надежно. Но можно написать код, который будет вызываться, когда сборщик мусора уничтожает объект.
Этот код выводит следующее:
Подчеркнем, что к моменту вызова чистильщика объект уже фактически уничтожен. Попытка преобразовать идентификатор в ссылку на объект с помощью метода
Имейте в виду, что в Ruby применяется консервативный вариант сборки мусора по алгоритму пометки и удаления. Нет гарантии, что любой объект будет убран до завершения программы.
Однако все это может оказаться и ненужным. В Ruby существует стиль программирования, в котором для инкапсуляции работы с ресурсами служат блоки. В конце блока ресурс освобождается, и жизнь продолжается без помощи чистильщиков. Рассмотрим, например, блочную форму метода
Здесь в блок передается объект
Мы проверяем наличие блока. Если блок был передан, то мы вызываем его, передавая открытый файл. Делается это в контексте блока
11.4. Заключение
В этой главе были приведены примеры использования более сложных и даже экзотических механизмов ООП, а также решения некоторых рутинных задач. Мы видели, как реализуются некоторые паттерны проектирования. Познакомились мы и с API отражения в Ruby, продемонстрировали ряд интересных следствий динамической природы Ruby и некоторые трюки, возможные в динамическом языке.
Пришло время вернуться в реальный мир. Ведь ООП — не самоцель, а всего лишь средство достижения цели. Последняя же заключается в написании эффективных, безошибочных и удобных для сопровождения приложений.
Первый среди равных. Книга XII
12. Первый среди Равных
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
рейтинг книги
Стеллар. Заклинатель
3. Стеллар
Фантастика:
боевая фантастика
рейтинг книги
Темный двойник Корсакова. Оккультный детектив
2. Тайный архив Корсакова
Детективы:
исторические детективы
крутой детектив
рейтинг книги
Последний Паладин. Том 14
14. Путь Паладина
Фантастика:
аниме
фэнтези
попаданцы
рейтинг книги
Александр III и его время
Научно-образовательная:
история
культурология
рейтинг книги
Санта-Хрякус
20. Плоский мир
Фантастика:
юмористическая фантастика
рейтинг книги