Программирование на языке Ruby
Шрифт:
6.1.2. Символы как метазначения
Мы нередко пользуемся исключениями, чтобы уйти от кодов возврата. Но никто не мешает возвращать коды ошибки, если вам так хочется. К тому же в Ruby метод может возвращать более одного значения.
В таком механизме часто возникает необходимость. Когда-то символ NUL кода ASCII вообще не считался символом. В языке С есть понятие нулевого указателя (
Проблема в том, что такие метазначения часто путают
Идея в том, что иногда символы могут выступать в роли подходящих метазначений. Представьте метод, который получает строку из сети (возможно, по протоколу HTTP или иным способом). При желании можно было бы вернуть нестроковое значение как индикатор исключительной ситуации.
Можно ли сказать, что это «лучше», чем механизм исключений? Необязательно. Но такую методику стоит иметь в виду, особенно когда приходится обрабатывать «граничные случаи», которые не считаются ошибками.
6.1.3. Символы, переменные и методы
Наверное, чаще всего символы применяются для определения атрибутов класса:
Имейте в виду, что в этом фрагменте на самом деле исполняется некий код. Например,
Короче говоря, символ, передаваемый методам из семейства
В большинстве случаев (если не во всех!) методы, ожидающие
6.1.4. Преобразование строки в символ и обратно
Строки и символы можно преобразовывать друг в друга с помощью методов
Для метапрограммирования иногда бывает полезен такой метод:
Он позволяет конкатенировать символы (или дописывать строку в конец символа). Ниже приведен пример использования; мы принимаем на входе символ и пытаемся определить, представляет ли он какой-нибудь метод доступа (то есть существует ли метод чтения или установки атрибута с таким именем):
Упомяну также о более изощренном способе применения символов. Иногда при выполнении операции map нужно указать сложный блок. Однако во многих случаях мы просто вызываем некоторый метод для каждого элемента массива или набора:
He кажется ли вам, что для такой простой задачи слишком много знаков препинания? Давайте вместо этого определим метод
Кстати, этот код заимствован из проекта Гэвина Синклера (Gavin Sinclair) «Расширения Ruby». Имея такой метод, мы можем следующим образом переписать первоначальный код:
Стоит потратить немного времени и разобраться, как это работает. Метод
Геральт (сборник)
Фантастика:
героическая фантастика
рейтинг книги
Спецоперации. Лубянка и Кремль 1930–1950 годы
Документальная литература:
биографии и мемуары
рейтинг книги
Я, последний. Трилогия
Фантастика:
фэнтези
попаданцы
рейтинг книги
Весь Клайв Баркер в одном томе. Компиляция
Абсолют
Фантастика:
боевая фантастика
ужасы и мистика
рейтинг книги
Капитализму в России не бывать! Выход есть!
Документальная литература:
публицистика
рейтинг книги
Последний рейд
5. Медорфенов
Фантастика:
фэнтези
аниме
рейтинг книги
Высоцкий
829. Жизнь замечательных людей
Документальная литература:
биографии и мемуары
рейтинг книги
МИФЫ. Великолепный МИФ (сборник)
Мифология
Фантастика:
юмористическое фэнтези
рейтинг книги
Dolgin.indb
Старинная литература:
прочая старинная литература
рейтинг книги
Избранные произведения
Фантастика:
научная фантастика
рейтинг книги
Ночная смена
Фантастика:
ужасы и мистика
рейтинг книги
Собрание юмористических рассказов в одном томе
Проза:
русская классическая проза
рейтинг книги
Дюна
Фантастика:
научная фантастика
рейтинг книги
Семь дней Создателя
Фантастика:
фэнтези
рейтинг книги