ВикиЧтение
Поиск
Содержание
ВикиЧтение
Программирование на языке Ruby [Идеология языка, теория и практика применения]
Фултон Хэл
8.3.6. Энумераторы
Данный текст является ознакомительным фрагментом.
Продолжение на Litres.ru
{{title}}
{{{description}}}
Предисловие
Благодарности
Об авторе
Введение
О втором издании
Как организована эта книга
Продолжение на Litres.ru
Об исходных текстах, приведенных в книге
«Путь Ruby»
Глава 1. Обзор Ruby
1.1. Введение в объектно-ориентированное программирование
1.1.1. Что такое объект
1.1.2. Наследование
1.1.3. Полиморфизм
1.1.4. Еще немного терминов
1.2. Базовый синтаксис и семантика Ruby
1.2.1. Ключевые слова и идентификаторы
1.2.2. Комментарии и встроенная документация
1.2.3. Константы, переменные и типы
1.2.4. Операторы и приоритеты
1.2.5. Пример программы
1.3. ООП в Ruby
1.3.1. Объекты
1.3.2. Встроенные классы
1.3.3. Модули и классы-примеси
1.3.4. Создание классов
1.3.5. Методы и атрибуты
1.4. Динамические аспекты Ruby
1.4.1. Кодирование во время выполнения
1.4.2. Отражение
1.4.3. Отсутствующие методы
1.4.4 Сборка мусора
1.5. Потренируйте свою интуицию: что следует запомнить
1.5.2. Перспективы программирования
1.5.3. Предложение case в Ruby
1.5.4. Рубизмы и идиомы
1.5.5. Ориентация на выражения и прочие вопросы
1.6. Жаргон Ruby
1.7. Заключение
Глава 2. Строки
2.4. Получение длины строки
2.5. Построчная обработка
2.6. Побайтовая обработка
2.7. Специализированное сравнение строк
2.9. Форматирование строк
2.10. Строки в качестве объектов ввода/вывода
2.11. Управление регистром
2.12. Вычленение и замена подстрок
2.14. Поиск в строке
2.15. Преобразование символов в коды ASCII и обратно
2.17. Дописывание в конец строки
2.18. Удаление хвостовых символов новой строки и прочих
2.19. Удаление лишних пропусков
2.20. Повтор строк
2.21. Включение выражений в строку
2.24. Преобразование строки в число (десятичное или иное)
2.26. Шифрование строк
2.28. Подсчет числа символов в строке
2.30. Удаление дубликатов
2.31. Удаление заданных символов
2.32. Печать специальных символов
2.33. Генерирование последовательности строк
2.36. Вычисление расстояния Левенштейна между двумя строками
2.37. base64-кодирование и декодирование
2.39. Замена символов табуляции пробелами и сворачивание пробелов в табуляторы
2.41. Заключение
Глава 3. Регулярные выражения
3.1. Синтаксис регулярных выражений
3.2. Компиляция регулярных выражений
3.3. Экранирование специальных символов
3.4. Якоря
3.6. Позитивное и негативное заглядывание вперед
3.8. Классы символов
3.10. Сопоставление точки символу конца строки
3.11. Внутренние модификаторы
3.12. Внутренние подвыражения
3.13. Ruby и Oniguruma
3.13.2. Сборка Oniguruma
3.13.3. Некоторые новые возможности Oniguruma
3.13.5. Еще о кванторах
3.13.7. Рекурсия в регулярных выражениях
3.14. Примеры регулярных выражений
3.14.1. Сопоставление с IP-адресом
3.14.2. Сопоставление с парой «ключ-значение»
3.14.3. Сопоставление с числами, записанными римскими цифрами
3.14.4 Сопоставление с числовыми константами
3.14.5 Сопоставление с датой и временем
3.14.7. Поиск слов, целиком набранных прописными буквами
3.14.8. Сопоставление с номером версии
3.14.9. Еще несколько образцов
3.15. Заключение
Глава 4. Интернационализация в Ruby
4.1. Исторические сведения и терминология
4.2. Кодировки в пост-ASCII мире
4.2.1. Библиотека jcode и переменная $KCODE
4.3. Справочники сообщений
4.3.2. Приступаем к работе со справочниками сообщений
4.3.4. Прочие замечания
4.4. Заключение
Глава 5. Численные методы
5.1. Представление чисел в языке Ruby
5.2. Основные операции над числами
5.3. Округление чисел с плавающей точкой
5.4. Сравнение чисел с плавающей точкой
5.6. Вставка разделителей при форматировании чисел
5.7. Работа с очень большими числами
5.9. Работа с рациональными числами
5.10. Перемножение матриц
5.11. Комплексные числа
5.12. Библиотека mathn
5.15. Явные и неявные преобразования чисел
5.17. Поразрядные операции над числами
5.18. Преобразование системы счисления
5.19. Извлечение кубических корней, корней четвертой степени и т.д.
5.21. Численное вычисление определенного интеграла
5.22. Тригонометрия в градусах, радианах и градах
5.23. Неэлементарная тригонометрия
5.24. Вычисление логарифмов по произвольному основанию
5.25. Вычисление среднего, медианы и моды набора данных
5.26. Дисперсия и стандартное отклонение
5.27. Вычисление коэффициента корреляции
5.28. Генерирование случайных чисел
5.30. Заключение
Глава 6. Символы и диапазоны
6.1. Символы
6.1.1. Символы как перечисления
6.1.2. Символы как метазначения
6.1.3. Символы, переменные и методы
6.1.4. Преобразование строки в символ и обратно
6.2. Диапазоны
6.2.1. Открытые и замкнутые диапазоны
6.2.2. Нахождение границ диапазона
6.2.3. Обход диапазона
6.2.4. Проверка принадлежности диапазону
6.2.5. Преобразование в массив
6.2.6. Обратные диапазоны
6.2.7. Оператор переключения
6.3. Заключение
Глава 7. Дата и время
7.1. Определение текущего момента времени
7.2. Работа с конкретными датами (после точки отсчета)
7.3. Определение дня недели
7.4. Определение даты Пасхи
7.5. Вычисление n-ого дня недели в месяце
7.6. Преобразование из секунд в более крупные единицы
7.7. Вычисление промежутка времени, прошедшего от точки отсчета
7.8. Високосные секунды
7.9. Определение порядкового номера дня в году
7.10. Контроль даты и времени
7.11. Определение недели в году
7.12. Проверка года на високосность
7.13. Определение часового пояса
7.14. Манипулирование временем без даты
7.15 Сравнение моментов времени
7.16 Прибавление интервала к моменту времени
7.17. Вычисление разности между двумя моментами времени
7.18. Работа с конкретными датами (до точки отсчета)
7.19. Взаимные преобразования объектов Date, Time и DateTime
7.20. Извлечение даты и времени из строки
7.21. Форматирование и печать даты и времени
7.22. Преобразование часовых поясов
7.24. Разбиение месяца на недели
7.25. Заключение
Глава 8. Массивы, хэши и другие перечисляемые структуры
8.1. Массивы
8.1.1. Создание и инициализация массива
8.1.2. Доступ к элементам массива и присваивание им значений
8.1.3. Определение размера массива
8.1.4. Сравнение массивов
8.1.5. Сортировка массива
8.1.6. Выборка из массива по заданному критерию
8.1.7. Специализированные функции индексирования
8.1.8. Реализация разреженной матрицы
8.1.9. Массивы как математические множества
8.1.10. Рандомизация массива
8.1.11. Многомерные массивы
8.1.12. Нахождение элементов, принадлежащих одному массиву и не принадлежащих другому
8.1.13. Преобразование или отображение массивов
8.1.14. Удаление из массива элементов равных nil
8.1.15. Удаление заданных элементов из массива
8.1.16. Конкатенирование массивов и добавление в конец массива
8.1.17. Использование массива в качестве стека или очереди
8.1.18. Обход массива
8.1.19. Преобразование массива в строку с разделителями
8.1.20. Обращение массива
8.1.21. Удаление дубликатов из массива
8.1.22. Чередование массивов
8.1.23. Вычисление частоты различных значений в массиве
8.1.24. Инвертирование массива для получения хэша
8.1.25. Синхронная сортировка нескольких массивов
8.1.26. Указание значения по умолчанию для новых элементов массива
8.2. Хэши
8.2.1. Создание нового хэша
8.2.2. Указание значения по умолчанию для хэша
8.2.3. Доступ к парам ключ-значение и добавление новых пар
8.2.4. Удаление пар ключ-значение
8.2.5. Обход хэша
8.2.6. Инвертирование хэша
8.2.7. Поиск ключей и значений в хэше
8.2.8. Копирование хэша в массив
8.2.9. Выборка пар ключ-значение по заданному критерию
8.2.10. Сортировка хэша
8.2.11. Объединение двух хэшей
8.2.12. Создание хэша из массива
8.2.13. Вычисление разности и пересечения хэшей
8.2.14. Хэш как разреженная матрица
8.2.15. Реализация хэша с повторяющимися ключами
8.3. Перечисляемые структуры в общем
8.3.1. Метод inject
8.3.2. Кванторы
8.3.3. Метод partition
8.4. Заключение
Глава 9. Более сложные структуры данных
9.1.1. Простые операции над множествами
9.2. Стеки и очереди
9.2.1. Более строгая реализация стека
9.2.2. Обнаружение несбалансированных скобок
9.2.3. Стек и рекурсия
9.2.4. Более строгая реализация очереди
9.3. Деревья
9.3.1. Реализация двоичного дерева
9.3.2. Сортировка с помощью двоичного дерева
9.3.3. Использование двоичного дерева как справочной таблицы
9.3.4. Преобразование дерева в строку или массив
9.4. Графы
9.4.1. Реализация графа в виде матрицы смежности
9.4.2. Является ли граф связным?
9.4.3. Есть ли в графе эйлеров цикл?
9.4.4. Есть ли в графе эйлеров путь?
9.4.5. Инструменты для работы с графами в Ruby
9.5. Заключение
Глава 10. Ввод/вывод и хранение данных
10.1. Файлы и каталоги
10.1.1. Открытие и закрытие файлов
10.1.2. Обновление файла
10.1.3. Дописывание в конец файла
10.1.4. Прямой доступ к файлу
10.1.5. Работа с двоичными файлами
10.1.6. Блокировка файлов
10.1.7. Простой ввод/вывод
10.1.8. Буферизованный и небуферизованный ввод/вывод
10.1.9. Манипулирование правами владения и разрешениями на доступ к файлу
10.1.10. Получение и установка временных штампов
10.1.11. Проверка существования и получение размера файла
10.1.12. Опрос специальных свойств файла
10.1.14. Специальные операции ввода/вывода
10.1.16. Применение метода readpartial
10.1.17. Манипулирование путевыми именами
10.1.18. Класс Pathname
10.1.19. Манипулирование файлами на уровне команд
10.1.21. Чтение всего файла в память
10.1.22. Построчное чтение из файла
10.1.23. Побайтное чтение из файла
10.1.27. Работа с временными файлами
10.1.28. Получение и изменение текущего каталога
10.1.29. Изменение текущего корня
10.1.30. Обход каталога
10.1.31. Получение содержимого каталога
10.1.32. Создание цепочки каталогов
10.1.34. Поиск файлов и каталогов
10.2. Доступ к данным более высокого уровня
10.2.2. Более сложный маршалинг
10.2.3. Ограниченное «глубокое копирование» в ходе маршалинга
10.2.4. Обеспечение устойчивости объектов с помощью библиотеки PStore
10.2.7. Преобладающие объекты и библиотека Madeleine
10.4. Подключение к внешним базам данных
10.4.6. Обертка вокруг DBI
10.5. Заключение
Глава 11. ООП и динамические механизмы в Ruby
11.1. Рутинные объектно-ориентированные задачи
11.1.1. Применение нескольких конструкторов
11.1.2. Создание атрибутов экземпляра
11.1.3. Более сложные конструкторы
11.1.4. Создание атрибутов и методов уровня класса
11.1.5. Наследование суперклассу
11.1.6. Опрос класса объекта
11.1.7. Проверка объектов на равенство
11.1.8. Управление доступом к методам
11.1.10. Метод initialize_copy
11.1.11. Метод allocate
11.1.12. Модули
11.1.14. Классы, содержащие только данные (Struct)
11.2. Более сложные механизмы
11.2.1. Отправка объекту явного сообщения
11.2.2. Специализация отдельного объекта
11.2.3. Вложенные классы и модули
11.2.4. Создание параметрических классов
11.2.5. Использование продолжений для реализации генератора
11.2.6. Хранение кода в виде объекта
11.2.7. Как работает включение модулей?
11.2.8. Опознание параметров, заданных по умолчанию
11.2.10. Автоматическое определение методов чтения и установки на уровне класса
11.2.11. Поддержка различных стилей программирования
11.3. Динамические механизмы
11.3.2. Метод const_get
11.3.3. Динамическое создание экземпляра класса, заданного своим именем
11.3.4. Получение и установка переменных экземпляра
11.3.5. Метод define_method
11.3.6. Метод const_missing
11.3.7. Удаление определений
11.3.8. Получение списка определенных сущностей
11.3.11. Обход пространства объектов
11.4. Заключение
Глава 12. Графические интерфейсы для Ruby
12.1. Ruby/Tk
12.1.1. Обзор
12.1.4. Текстовые поля
12.1.6. Дополнительные замечания
12.2. Ruby/GTK2
12.2.1. Обзор
12.2.3. Кнопки
12.2.5. Прочие виджеты
12.2.6. Дополнительные замечания
12.3. FXRuby (FOX)
12.3.1. Обзор
12.3.4. Текстовые поля
12.3.6. Дополнительные замечания
12.4. QtRuby
12.4.1. Обзор
12.4.6. Дополнительные замечания
12.5. Другие библиотеки для создания графических интерфейсов
12.5.1. Ruby и X
12.5.2. Ruby и wxWidgets
12.5.3. Apollo (Ruby и Delphi)
12.5.4. Ruby и Windows API
12.6. Заключение
Глава 13. Потоки в Ruby
13.1. Создание потоков и манипулирование ими
13.1.1. Создание потоков
13.1.2. Доступ к локальным переменным потока
13.1.3. Опрос и изменение состояния потока
13.1.4. Назначение рандеву (и получение возвращенного значения)
13.1.5. Обработка исключений
13.1.6. Группы потоков
13.2. Синхронизация потоков
13.2.1. Синхронизация с помощью критических секций
13.2.7. Ожидание события
13.2.8. Продолжение обработки во время ввода/вывода
13.2.9. Реализация параллельных итераторов
13.2.10. Параллельное рекурсивное удаление
13.3. Заключение
Глава 14. Сценарии и системное администрирование
14.1. Запуск внешних программ
14.1.2. Перехват вывода программы
14.1.3. Манипулирование процессами
14.1.4. Стандартный ввод и вывод
14.2. Флаги и аргументы в командной строке
14.2.1. Разбор флагов в командной строке
14.2.2. Константа ARGF
14.3. Библиотека Shell
14.3.1. Использование библиотеки Shell для перенаправления ввода/вывода
14.3.2. Дополнительные замечания по поводу библиотеки shell.rb
14.4. Переменные окружения
14.4.2. Хранение переменных окружения в виде массива или хэша
14.5. Сценарии на платформе Microsoft Windows
14.5.2. Расширение Win32OLE
14.5.3. Использование ActiveScriptRuby
14.6. Моментальный инсталлятор для Windows
14.7. Библиотеки, о которых полезно знать
14.8. Работа с файлами, каталогами и деревьями
14.8.1. Несколько слов о текстовых фильтрах
14.8.3. Удаление файлов по времени модификации и другим критериям
14.9. Различные сценарии
14.9.1. Ruby в виде одного файла
14.9.3. Получение и установка кодов завершения
14.9.4. Работает ли Ruby в интерактивном режиме?
14.9.5. Определение текущей платформы или операционной системы
14.9.6. Модуль Etc
14.10. Заключение
Глава 15. Ruby и форматы данных
15.2. RSS и Atom
15.3. Обработка изображений при помощи RMagick
15.4.1. Основные концепции и приемы
15.5. Заключение
Глава 16. Тестирование и отладка
16.5. Измерение покрытия кода
16.8. Заключение
Глава 17. Создание пакетов и распространение программ
17.1.2. Более сложное форматирование
17.2. Установка и подготовка пакета
17.3. RubyForge и RAA
17.4. Заключение
Глава 18. Сетевое программирование
18.1. Сетевые серверы
18.1.2. Реализация многопоточного сервера
18.2. Сетевые клиенты
18.2.3. Взаимодействие с РОР-сервером
18.2.8. Получение Web-страницы с известным URL
18.3. Заключение
Глава 19. Ruby и Web-приложения
19.3. Ruby on Rails
19.3.1. Принципы и техника
19.3.2. Тестирование и отладка приложений Rails
19.3.3. Базовые расширения
19.3.4. Дополнительные инструменты и библиотеки
19.4. Разработка Web-приложений с помощью Nitro
19.5. Введение в Wee
19.6. Разработка Web-приложений с помощью IOWA
19.7. Ruby и Web-сервер
19.7.1. Модуль mod_ruby
19.8. Заключение
Глава 20. Распределенный Ruby
20.1. Обзор: библиотека drb
20.5. Заключение
Глава 21. Инструменты разработки для Ruby
21.4. Утилита ri
21.5. Поддержка со стороны редакторов
21.6. Интегрированные среды разработки
21.7. Заключение
Глава 22. Сообщество пользователей Ruby
22.1. Ресурсы в Web
22.2. Новостные группы и списки рассылки
22.3. Блоги и онлайновые журналы
22.4. Запросы на изменение Ruby
22.5. Каналы IRC
22.6. Конференции по Ruby
22.7. Локальные группы пользователей Ruby
22.8. Заключение