Программирование на языке Ruby
Шрифт:
Но это работать не будет. Вызов
Можно было бы вынести определение переменной класса в базовый класс, но тогда перестали бы работать определенные нами методы класса! Можно было исправить и это, перенеся определения в дочерние классы, однако тем самым губится первоначальная идея, ведь таким образом объявляются отдельные классы без какой бы то ни было «параметризации».
Мы предлагаем другое решение. Отложим вычисление переменной класса до момента выполнения, воспользовавшись методом
Не стоит и говорить, что механизм наследования здесь по-прежнему работает. Все методы и переменные экземпляра, определенные в классе
В листинге 11.14 предложено, наверное, наилучшее решение. В нем используются только переменные экземпляра, а от переменных класса мы вообще отказались.
Здесь мы открываем синглетный класс и определяем метод доступа
В качестве небольшого усовершенствования добавим еще вызов метода
Сделав метод установки закрытым, мы запретили изменять значение вне иерархии данного класса. Как всегда,
Есть и другие способы решения этой задачи. Проявите воображение.
11.2.5. Использование продолжений для реализации генератора
Одно из самых трудных для понимания средств Ruby — продолжение (continuation). Это структурированный способ выполнить нелокальный переход и возврат. В объекте продолжения хранятся адрес возврата и контекст выполнения. В каком-то смысле это аналог функций
Метод
В классе
Считайте, что продолжение — что-то вроде операции «сохранить игру» в классических «бродилках». Вы сохраняете игру в точке, где все спокойно, а потом пробуете выполнить нечто потенциально опасное. Если эксперимент заканчивается гибелью, то вы восстанавливаете сохраненное состояние игры и пробуете пойти другим путем.
Самый лучший способ разобраться в продолжениях — посмотреть фильм «Беги, Лола, беги».
Есть несколько хороших примеров того, как пользоваться продолжениями. Самые лучшие предложил Джим Вайрих (Jim Weirich). Ниже показано, как Джим реализовал «генератор» после дискуссии еще с одним программистом на Ruby, Хью Сассе (Hugh Sasse).
Идея генератора навеяна методом
Вернадский
325. Жизнь замечательных людей
Документальная литература:
биографии и мемуары
рейтинг книги
Технология XSLT
Компьютеры и Интернет:
программирование
рейтинг книги
Волкодав
1. Волкодав
Фантастика:
фэнтези
героическая фантастика
рейтинг книги
Петербург - нуар. Рассказы
Проза:
современная проза
рейтинг книги
Я князь. Книга XVIII
18. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
рейтинг книги
Ведьмак (сборник)
Фантастика:
фэнтези
рейтинг книги
Самвел
Проза:
историческая проза
рейтинг книги
Приключения Оливера Твиста. Повести и рассказы
82. Библиотека всемирной литературы
Проза:
классическая проза
рейтинг книги
Том 5. Рудин. Повести и рассказы 1853-1857
5. Собрание сочинений в двенадцати томах
Проза:
русская классическая проза
рейтинг книги
Рыцарь Империи
3. Одержимый
Фантастика:
фэнтези
рейтинг книги
Ганнибал
3. Ганнибал Лектер
Детективы:
триллеры
рейтинг книги