УДК 004.438Ruby
ББК 32.973.22
Фултон Х., Арко А.
Ф94 Путь Ruby. – М.: ДМК Пресс, 2016. – 656 с.: ил.
ISBN 978-5-97060-320-8
Уже больше десяти лет программисты на Ruby обращаются к данной книге как к надежному
источнику сведений о том, как эффективно писать на этом языке. А теперь Хэл
Фултон и Андрэ Арко изрядно обновили этот классический труд, включив описание новых
средств языка и инструментов.
Новое издание охватывает версию Ruby 2.1 и содержит более 400 примеров, отвечающих
на вопрос «Как это делается в Ruby?». Все примеры сопровождаются подробным
описанием задачи и технических ограничений. Затем дается пошаговое объяснение одного
хорошего решения с детальными комментариями, позволяющими лучше усвоить
материал.
Третье издание удобно организовано по темам, так что стало еще проще найти ответ
на свой вопрос и писать более качественный код в согласии с духом и философией Ruby.
УДК 004.438Ruby
ББК 32.973.22
Все права защищены. Любая часть этой книги не может быть воспроизведена в какой
бы то ни было форме и какими бы то ни было средствами без письменного разрешения
владельцев авторских прав.
Материал, изложенный в данной книге, многократно проверен. Но поскольку вероятность
технических ошибок все равно существует, издательство не может гарантировать
абсолютную точность и правильность приводимых сведений. В связи с этим издательство
не несет ответственности за возможные ошибки, связанные с использованием книги.
All rights reserved. No part of this book may be reproduced or transmitted in any form or by
any means, electronic, mechanical, photocopying, recording or otherwise, without prior written
permission the publisher. For information on getting permission for reprints and excerpts, contact
permission@peachpit.com. RUSSIAN language edition published by DMK PUBLISHERS,
Copyright © 2015.
ISBN 978-0-321-71463-3 (анг.)
ISBN 978-5-97060-320-8 (рус.)
Copyright 2015 © Pearson Education, Inc.
© Оформление, перевод, ДМК Пресс, 2016
Стр.5
Содержание
Предисловие ......................................................... 22
Благодарности ....................................................... 26
Об авторах ............................................................ 29
Введение .............................................................. 30
Глава 1. Обзор Ruby ................................................ 39
1.1. Введение в объектно-ориентированное
программирование .....................................................................40
1.1.1. Что такое объект ............................................................40
1.1.2. Наследование................................................................41
1.1.3. Полиморфизм ...............................................................43
1.1.4. Еще немного терминов ..................................................44
1.2. Базовый синтаксис и семантика Ruby ...................................45
1.2.1. Ключевые слова и идентификаторы ...............................46
1.2.2. Комментарии и встроенная документация .....................47
1.2.3. Константы, переменные и типы .....................................47
1.2.4. Операторы и приоритеты ...............................................49
1.2.5. Пример программы .......................................................50
1.2.6. Циклы и ветвление.........................................................53
1.2.7. Исключения ...................................................................57
1.3. ООП в Ruby ...........................................................................59
1.3.1. Объекты ........................................................................60
1.3.2. Встроенные классы .......................................................60
1.3.3. Модули и классы-примеси .............................................61
1.3.4. Создание классов ..........................................................62
1.3.5. Методы и атрибуты ........................................................66
1.4. Динамические аспекты Ruby .................................................68
1.4.1. Кодирование во время выполнения ...............................69
1.4.2. Отражение .....................................................................70
1.4.3. Отсутствующие методы .................................................72
Стр.7
Содержание
7
1.4.4. Сборка мусора...............................................................72
1.5. Потренируйте свою интуицию: что следует запомнить..........73
1.5.1. Синтаксис ......................................................................73
1.5.2. Отличия от других языков ..............................................75
1.5.3. Предложение case в Ruby ..............................................77
1.5.4. Рубизмы и идиомы ........................................................80
1.5.5. Ориентация на выражения и прочие вопросы ................85
1.6. Жаргон Ruby .........................................................................87
1.7. Заключение ..........................................................................90
Глава 2. Строки ...................................................... 91
2.1. Представление обычных строк .............................................91
2.2. Альтернативная нотация для представления строк ...............92
2.3. Встроенные документы ........................................................93
2.4. Получение длины строки ......................................................94
2.5. Построчная обработка ..........................................................94
2.6. Побайтовая обработка ..........................................................95
2.7. Специализированное сравнение строк .................................96
2.8. Разбиение строки на лексемы ..............................................97
2.9. Форматирование строк ........................................................98
2.10. Строки в качестве объектов ввода-вывода ..........................99
2.11. Управление регистром .......................................................99
2.12. Вычленение и замена подстрок ........................................100
2.13. Подстановка в строках ......................................................102
2.14. Поиск в строке ..................................................................103
2.15. Преобразование символов в коды ASCII и обратно ...........104
2.16. Явные и неявные преобразования ....................................104
2.17. Дописывание в конец строки ............................................106
2.18. Удаление хвостовых символов новой строки и прочих ......106
2.19. Убирание лишних пропусков .............................................107
2.20. Повтор строк ....................................................................108
2.21. Включение выражений в строку ........................................108
2.22. Отложенная интерполяция ................................................109
2.23. Разбор данных, разделенных запятыми ............................109
2.24. Преобразование строки в число (десятичное или иное) ....110
2.25. Кодирование и декодирование строк в кодировке rot13 ....111
2.26. Шифрование строк ...........................................................112
2.27. Сжатие строк ....................................................................113
2.28. Подсчет числа символов в строке .....................................113
2.29. Обращение строки ............................................................114
Стр.8
8
Содержание
2.30. Удаление дубликатов ........................................................114
2.31. Удаление заданных символов ...........................................114
2.32. Печать специальных символов ..........................................115
2.33. Генерирование последовательности строк .......................115
2.34. Вычисление 32-разрядного CRC .......................................115
2.35. Вычисление SHA-256-свертки строки ...............................116
2.36. Вычисление расстояния Левенштейна между двумя
строками ...................................................................................117
2.37. base64-кодирование и декодирование строк ....................118
2.38. Замена символов табуляции пробелами
и сворачивание пробелов в табуляторы ....................................119
2.39. Перенос строк по словам ..................................................120
2.40. Заключение ......................................................................121
Глава 3. Регулярные выражения ...............................122
3.1. Синтаксис регулярных выражений ......................................122
3.2. Компиляция регулярных выражений ...................................124
3.3. Экранирование специальных символов ..............................125
3.4. Якоря ..................................................................................125
3.5. Кванторы ............................................................................126
3.6. Позитивное и негативное заглядывание вперед .................128
3.7. Позитивное и негативное оглядывание назад .....................129
3.8. Обратные ссылки ................................................................130
3.9. Именованные соответствия ................................................133
3.10. Классы символов ..............................................................134
3.11. Обобщенные регулярные выражения ................................135
3.12. Сопоставление точки символу конца строки .....................136
3.13. Внутренние модификаторы ..............................................137
3.14. Внутренние подвыражения ...............................................137
3.14.1. Рекурсия в регулярных выражениях ...........................138
3.15. Примеры регулярных выражений ......................................139
3.15.1. Сопоставление с IP-адресом .....................................139
3.15.2. Сопоставление с парой «ключ-значение» ...................140
3.15.3. Сопоставление с числами, записанными
римскими цифрами ..............................................................140
3.15.4. Сопоставление с числовыми константами .................141
3.15.5. Сопоставление с датой и временем ...........................141
3.15.6. Обнаружение удвоенных слов в тексте ......................142
3.15.7. Поиск слов, записанных одними заглавными
буквами ................................................................................142
Стр.9
Содержание
9
3.15.8. Сопоставление с номером версии .............................143
3.15.9. Еще несколько образцов............................................143
3.16. Заключение ......................................................................144
Глава 4. Интернационализация в Ruby .......................145
4.1. Исторические сведения и терминология ............................146
4.2. Работа с кодировками ........................................................150
4.2.1. Нормализация .............................................................151
4.2.2. Преобразование из одной кодировки в другую ............154
4.2.3. Транслитерация ...........................................................155
4.2.4. Упорядочение строк ....................................................156
4.3. Перевод .............................................................................158
4.3.1. Значения по умолчанию ...............................................160
4.3.2. Пространства имен ......................................................161
4.3.3. Интерполяция ..............................................................161
4.3.4. Формы множественного числа ....................................162
4.4. Локализованное форматирование ......................................164
4.4.1. Дата и время ...............................................................164
4.4.2. Числа ...........................................................................165
4.4.3. Денежные величины ....................................................165
4.5. Заключение ........................................................................165
Глава 5. Численные методы .....................................167
5.1. Представление чисел в языке Ruby .....................................167
5.2. Основные операции над числами .......................................168
5.3. Округление чисел с плавающей точкой ...............................169
5.4. Сравнение чисел с плавающей точкой ................................171
5.5. Форматирование чисел для вывода ....................................172
5.6. Вставка разделителей при форматировании чисел ............173
5.7. Работа с очень большими числами .....................................173
5.8. Использование класса BigDecimal ......................................174
5.9. Работа с рациональными числами ......................................175
5.10. Перемножение матриц .....................................................176
5.11. Комплексные числа ..........................................................180
5.12. Библиотека mathn .............................................................181
5.13. Разложение на простые множители, вычисление НОД
и НОК ........................................................................................181
5.14. Простые числа ..................................................................182
5.15. Явные и неявные преобразования чисел ...........................183
5.16. Приведение числовых значений........................................184
Стр.10
10
Содержание
5.17. Поразрядные операции над числами ................................185
5.18. Преобразование системы счисления ................................186
5.19. Извлечение кубических корней, корней четвертой
степени и т.д. ............................................................................187
5.20. Определение порядка байтов ...........................................188
5.21. Численное вычисление определенного интеграла ............189
5.22. Тригонометрия в градусах, радианах и градах ..................190
5.23. Вычисление логарифмов по произвольному основанию ...191
5.24. Вычисление среднего, медианы и моды набора данных ...191
5.25. Дисперсия и стандартное отклонение ..............................193
5.26. Вычисление коэффициента корреляции ...........................193
5.27. Генерирование случайных чисел .......................................195
5.28. Кэширование функций с помощью метода memoize .........195
5.29. Заключение ......................................................................197
Глава 6. Символы и диапазоны ................................198
6.1. Символы .............................................................................198
6.1.1. Символы как перечисления .........................................200
6.1.2. Символы как метазначения..........................................200
6.1.3. Символы, переменные и методы .................................201
6.1.4. Преобразование строки в символ и обратно ................201
6.2. Диапазоны ..........................................................................203
6.2.1. Открытые и замкнутые диапазоны ...............................203
6.2.2. Нахождение границ диапазона ....................................203
6.2.3. Обход диапазона .........................................................203
6.2.4. Проверка принадлежности диапазону .........................204
6.2.5. Преобразование в массив ...........................................205
6.2.6. Обратные диапазоны ...................................................205
6.2.7. Оператор переключения ..............................................206
6.2.8. Нестандартные диапазоны ..........................................208
6.3. Заключение ........................................................................211
Глава 7. Дата и время .............................................212
7.1. Определение текущего момента времени ..........................213
7.2. Работа с конкретными датами (после точки отсчета) ..........213
7.3. Определение дня недели ....................................................214
7.4. Определение даты Пасхи ....................................................215
7.5. Вычисление n-ого дня недели в месяце ..............................215
7.6. Преобразование из секунд в более крупные единицы .........216
7.7. Вычисление промежутка времени, прошедшего
Стр.11
Содержание
11
от точки отсчета ........................................................................217
7.8. Високосные секунды ..........................................................217
7.9. Определение порядкового номера дня в году .....................218
7.10. Контроль даты и времени .................................................218
7.11. Определение недели в году ..............................................219
7.12. Проверка года на високосность ........................................220
7.13. Определение часового пояса ............................................220
7.14. Манипулирование временем без даты ..............................221
7.15. Сравнение моментов времени ..........................................221
7.16. Прибавление интервала к моменту времени .....................221
7.17. Вычисление разности между двумя моментами
времени ....................................................................................222
7.18. Работа с конкретными датами (до точки отсчета) ..............222
7.19. Взаимные преобразования объектов Date, Time
и DateTime .................................................................................223
7.20. Извлечение даты и времени из строки ..............................223
7.21. Форматирование и печать даты и времени .......................224
7.22. Преобразование часовых поясов ......................................225
7.23. Определение числа дней в месяце ...................................225
7.24. Разбиение месяца на недели ............................................226
7.25. Заключение ......................................................................227
Глава 8. Массивы, хэши и другие перечисляемые
структуры .........................................................228
8.1. Массивы .............................................................................228
8.1.1. Создание и инициализация массива............................229
8.1.2. Доступ к элементам массива и присваивание
им значений ..........................................................................230
8.1.3. Определение размера массива ...................................231
8.1.4. Сравнение массивов ...................................................231
8.1.5. Сортировка массива ....................................................233
8.1.6. Выборка из массива по заданному критерию ..............235
8.1.7. Специализированные функции индексирования..........236
8.1.8. Реализация разреженной матрицы ..............................238
8.1.9. Массивы как математические множества ....................239
8.1.10. Рандомизация массива .............................................242
8.1.11. Многомерные массивы ..............................................243
8.1.12. Нахождение элементов, принадлежащих одному
массиву и не принадлежащих другому ..................................244
8.1.13. Преобразование или отображение массивов .............244
Стр.12
12
Содержание
8.1.14. Удаление элементов, равных nil, из массива ..............244
8.1.15. Удаление заданных элементов из массива ................244
8.1.16. Конкатенирование массивов и добавление
в конец массива ....................................................................246
8.1.17. Использование массива в качестве стека
или очереди ..........................................................................247
8.1.18. Обход массива ..........................................................247
8.1.19. Преобразование массива в строку
с разделителями ...................................................................248
8.1.20. Обращение массива ..................................................248
8.1.21. Удаление дубликатов из массива ...............................248
8.1.22. Чередование массивов ..............................................248
8.1.23. Вычисление частоты различных значений
в массиве ..............................................................................249
8.1.24. Инвертирование массива для получения хэша ...........249
8.1.25. Синхронная сортировка нескольких массивов ...........250
8.1.26. Задание значения по умолчанию для новых
элементов массива ...............................................................250
8.2. Хэши ...................................................................................251
8.2.1. Создание нового хэша .................................................252
8.2.2. Задание значения по умолчанию для хэша ..................252
8.2.3. Доступ к парам ключ-значение и добавление
новых пар ..............................................................................253
8.2.4. Удаление пар ключ-значение .......................................254
8.2.5. Обход хэша ..................................................................255
8.2.6. Инвертирование хэша .................................................255
8.2.7. Поиск ключей и значений в хэше ..................................256
8.2.8. Копирование хэша в массив ........................................256
8.2.9. Выборка пар ключ-значение по заданному критерию .....256
8.2.10. Сортировка хэша .......................................................257
8.2.11. Объединение двух хэшей ...........................................257
8.2.12. Создание хэша из массива ........................................258
8.2.13. Вычисление разности и пересечения хэшей ..............258
8.2.14. Хэш как разреженная матрица ...................................258
8.2.15. Реализация хэша с повторяющимися ключами ..........259
8.2.16. Другие операции с хэшем ..........................................262
8.3. Перечисляемые структуры в общем....................................262
8.3.1. Метод inject .................................................................263
8.3.2. Кванторы .....................................................................264
Стр.13
Содержание
13
8.3.3. Метод partition .............................................................264
8.3.4. Обход с группировкой .................................................265
8.3.5. Преобразование в массив или множество ...................266
8.3.6. Перечислители ............................................................266
8.4. Дополнительные сведения о перечисляемых объектах .......268
8.4.1. Поиск и выборка ..........................................................268
8.4.2. Подсчет и сравнение ...................................................269
8.4.3. Итерирование .............................................................269
8.4.4. Извлечение и преобразование ....................................270
8.4.5. Ленивые перечислители ..............................................271
8.5. Заключение ........................................................................271
Глава 9. Более сложные структуры данных ................273
9.1. Множества .........................................................................273
9.1.1. Простые операции над множествами ..........................274
9.1.2. Более сложные операции над множествами ................275
9.2. Стеки и очереди .................................................................276
9.2.1. Более строгая реализация стека .................................278
9.2.2. Обнаружение несбалансированных скобок ..................278
9.2.3. Стек и рекурсия ...........................................................279
9.2.4. Более строгая реализация очереди .............................281
9.3. Деревья ..............................................................................282
9.3.1. Реализация двоичного дерева .....................................282
9.3.2. Сортировка с помощью двоичного дерева ...................284
9.3.3. Использование двоичного дерева как справочной
таблицы ................................................................................286
9.3.4. Преобразование дерева в строку или массив ..............286
9.4. Графы .................................................................................287
9.4.1. Реализация графа в виде матрицы смежности ............288
9.4.2. Является ли граф связным? .........................................290
9.4.3. Есть ли в графе эйлеров цикл? .....................................292
9.4.4. Есть ли в графе эйлеров путь? .....................................293
9.4.5. Инструменты для работы с графами в Ruby .................293
9.5. Заключение ........................................................................293
Глава 10. Ввод-вывод и хранение данных ..................295
10.1. Файлы и каталоги .............................................................296
10.1.1. Открытие и закрытие файлов .....................................296
10.1.2. Обновление файла ....................................................298
10.1.3. Дописывание в конец файла ......................................298
Стр.14
14
Содержание
10.1.4. Прямой доступ к файлу ..............................................298
10.1.5. Работа с двоичными файлами ....................................299
10.1.6. Блокировка файлов ...................................................300
10.1.7. Простой ввод-вывод ..................................................301
10.1.8. Буферизованный и небуферизованный ввод-вывод.....302
10.1.9. Манипулирование правами владения
и разрешениями на доступ к файлу .......................................303
10.1.10. Получение и установка временных меток .................304
10.1.11. Проверка существования и получение размера
файла ...................................................................................305
10.1.12. Опрос специальных свойств файла ..........................306
10.1.13. Каналы .....................................................................308
10.1.14. Специальные операции ввода-вывода .....................309
10.1.15. Неблокирующий ввод-вывод ...................................310
10.1.16. Применение метода readpartial ................................311
10.1.17. Манипулирование путевыми именами .....................311
10.1.18. Класс Pathname .......................................................312
10.1.19. Манипулирование файлами на уровне команд .........313
10.1.20. Ввод символов с клавиатуры ...................................314
10.1.21. Чтение всего файла в память ...................................315
10.1.22. Построчное чтение из файла ....................................315
10.1.23. Побайтное и посимвольное чтение из файла ...........315
10.1.24. Работа со строкой как с файлом...............................316
10.1.25. Копирование потока ................................................316
10.1.26. Работа с кодировками ..............................................317
10.1.27. Чтение данных, встроенных в текст программы .......317
10.1.28. Чтение исходного текста программы .......................317
10.1.29. Работа с временными файлами ...............................318
10.1.30. Получение и изменение текущего каталога ..............318
10.1.31. Изменение текущего корня ......................................319
10.1.32. Обход каталога ........................................................319
10.1.33. Получение содержимого каталога ............................319
10.1.34. Создание цепочки каталогов ....................................319
10.1.35. Рекурсивное удаление каталога ...............................320
10.1.36. Поиск файлов и каталогов ........................................320
10.2. Доступ к данным более высокого уровня ..........................321
10.2.1. Простой маршалинг ...................................................321
10.2.2. «Глубокое копирование» с помощью метода Marshal .....322
10.2.3. Более сложный маршалинг ........................................322
Стр.15
Содержание
15
10.2.4. Маршалинг в формате YAML ......................................323
10.2.5. Сохранение данных с помощью библиотеки JSON .....325
10.2.6. Работа с данными в формате CSV ..............................326
10.2.7. SQLite3 как SQL-хранилище данных ...........................327
10.3. Подключение к внешним базам данных .............................328
10.3.1. Подключение к базе данных MySQL ...........................329
10.3.2. Подключение к базе данных PostreSQL ......................331
10.3.3. Объектно-реляционные отображения (ORM) .............332
10.3.4. Подключение к хранилищу данных Redis ....................333
10.4. Заключение ......................................................................334
Глава 11. ООП и динамические механизмы в Ruby .......335
11.1. Рутинные объектно-ориентированные задачи ..................336
11.1.1. Применение нескольких конструкторов .....................336
11.1.2. Создание атрибутов экземпляра ...............................337
11.1.3. Более сложные конструкторы ....................................339
11.1.4. Создание атрибутов и методов уровня класса ...........341
11.1.5. Наследование суперклассу ........................................344
11.1.6. Опрос класса объекта ................................................346
11.1.7. Проверка объектов на равенство ...............................348
11.1.8. Управление доступом к методам ...............................349
11.1.9. Копирование объектов...............................................352
11.1.10. Метод initialize_copy .................................................353
11.1.11. Метод allocate ..........................................................354
11.1.12. Модули ....................................................................354
11.1.13. Трансформация или преобразование объектов .......358
11.1.14. Классы, содержащие только данные (Struct) ............359
11.1.15. Замораживание объектов ........................................360
11.1.16. Использование метода tap в цепочке методов .........362
11.2. Более сложные механизмы ...............................................362
11.2.1. Посылка объекту явного сообщения ..........................363
11.2.2. Специализация отдельного объекта ..........................364
11.2.3. Вложенные классы и модули ......................................368
11.2.4. Создание параметрических классов ..........................368
11.2.5. Хранение кода в виде объектов Proc ..........................371
11.2.6. Хранение кода в виде объектов Method .....................372
11.2.7. Использование символов в качестве блоков ..............373
11.2.8. Как работает включение модулей? .............................373
11.2.9. Опознание параметров, заданных по умолчанию .......376
11.2.10. Делегирование или перенаправление .....................376
Стр.16
16
Содержание
11.2.11. Автоматическое определение методов чтения
и установки на уровне класса ................................................379
11.2.12. Поддержка различных стилей программирования ...380
11.3. Динамические механизмы ................................................382
11.3.1. Динамическая интерпретация кода ...........................382
11.3.2. Метод const_get .........................................................383
11.3.3. Получение класса по имени .......................................384
11.3.4. Метод define_method .................................................384
11.3.5. Получение списка определенных сущностей .............387
11.3.6. Удаление определений ..............................................389
11.3.7. Ссылки на несуществующие константы .....................391
11.3.8. Вызовы несуществующих методов ............................392
11.3.9. Повышение безопасности с помощью taint ................393
11.3.10. Определение чистильщиков для объектов ...............395
11.4. Интроспекция программы ................................................396
11.4.1. Обход пространства объектов ...................................396
11.4.2. Просмотр стека вызовов ............................................397
11.4.3. Отслеживание изменений в определении класса
или объекта...........................................................................398
11.4.4. Мониторинг выполнения программы .........................401
11.5. Заключение ......................................................................402
Глава 12. Графические интерфейсы для Ruby .............403
12.1. Shoes 4 .............................................................................404
12.1.1. Начало работы с Shoes ..............................................404
12.1.2. Интерактивная кнопка ...............................................405
12.1.3. Текст и поле ввода .....................................................405
12.1.4. Компоновка ...............................................................407
12.1.5. Картинки и фигуры ....................................................408
12.1.6. События.....................................................................409
12.1.7. Прочие замечания .....................................................410
12.2. Ruby/Tk .............................................................................410
12.2.1. Обзор ........................................................................410
12.2.2. Простое оконное приложение ....................................411
12.2.3. Кнопки .......................................................................413
12.2.4. Текстовые поля ..........................................................416
12.2.5. Прочие виджеты ........................................................420
12.2.6. Дополнительные замечания ......................................423
12.3. Ruby/GTK3 ........................................................................423
Стр.17
Содержание
17
12.3.1. Обзор ........................................................................423
12.3.2. Простое оконное приложение ....................................424
12.3.3. Кнопки .......................................................................425
12.3.4. Текстовые поля ..........................................................427
12.3.5. Прочие виджеты ........................................................429
12.3.6. Дополнительные замечания ......................................434
12.4. QtRuby ..............................................................................435
12.4.1. Обзор ........................................................................435
12.4.2. Простое оконное приложение ....................................435
12.4.3. Кнопки .......................................................................436
12.4.4. Текстовые поля ..........................................................438
12.4.5. Прочие виджеты ........................................................439
12.4.6. Дополнительные замечания ......................................444
12.5. Swing ................................................................................444
12.6. Другие библиотеки для создания графических
интерфейсов .............................................................................446
12.6.1. UNIX и X11 ..................................................................446
12.6.2. FXRuby (FOX) ..............................................................446
12.6.3. RubyMotion для iOS и Mac OS X ..................................447
12.6.4. Windows Win32 API ......................................................447
12.7. Заключение ......................................................................447
Глава 13. Потоки и параллелизм ..............................448
13.1. Создание потоков и манипулирование ими .......................450
13.1.1. Создание потоков ......................................................450
13.1.2. Доступ к поточно-локальным переменным ................451
13.1.3. Опрос и изменение состояния потока ........................452
13.1.4. Назначение рандеву (и получение возвращенного
значения) ..............................................................................456
13.1.5. Обработка исключений ..............................................457
13.1.6. Группы потоков ..........................................................458
13.2. Синхронизация потоков ....................................................459
13.2.1. Простая синхронизация .............................................461
13.2.2. Синхронизация доступа с помощью мьютекса ...........462
13.2.3. Встроенные классы очередей ....................................464
13.2.4. Условные переменные ...............................................465
13.2.5. Другие способы синхронизации ................................467
13.2.6. Таймаут при выполнении операций ............................470
13.2.7. Ожидание события ....................................................472
13.2.8. Параллельный поиск в коллекции ..............................473
13.2.9. Параллельное рекурсивное удаление ........................474
Стр.18
18
Содержание
13.3. Волокна и кооперативная многозадачность ......................475
13.4. Заключение ......................................................................477
Глава 14. Скрипты и системное администрирование ...478
14.1. Запуск внешних программ ................................................478
14.1.1. Методы system и exec ................................................479
14.1.2. Запоминание вывода программы ..............................479
14.1.3. Манипулирование процессами ..................................480
14.1.4. Стандартный ввод и вывод ........................................483
14.2. Флаги и аргументы в командной строке ............................484
14.2.1. Константа ARGV .........................................................484
14.2.2. Константа ARGF .........................................................484
14.2.3. Разбор флагов в командной строке ...........................485
14.3. Библиотека Shell ...............................................................486
14.3.1. Использование библиотеки Shell
для перенаправления ввода-вывода .....................................487
14.3.2. Дополнительные замечания по поводу
библиотеки Shell ...................................................................488
14.4. Переменные окружения ....................................................489
14.4.1. Чтение и установка переменных окружения ...............489
14.4.2. Хранение переменных окружения в виде массива
или хэша ...............................................................................490
14.5. Работа с файлами, каталогами и деревьями .....................491
14.5.1. Несколько слов о текстовых фильтрах ........................491
14.5.2. Копирование дерева каталогов (с символическими
ссылками) .............................................................................491
14.5.3. Удаление файлов по времени модификации
и другим критериям ..............................................................493
14.5.4. Вычисление свободного места на диске ....................494
14.6. Различные скрипты ...........................................................494
14.6.1. Распространение программ на Ruby ..........................494
14.6.2. Подача входных данных Ruby по конвейеру................495
14.6.3. Работает ли Ruby в интерактивном режиме? ..............496
14.6.4. Определение текущей платформы
или операционной системы ..................................................497
14.6.5. Модуль Etc .................................................................497
14.7. Заключение ......................................................................498
Глава 15. Ruby и форматы данных ............................499
15.1. Разбор JSON ....................................................................500
15.1.1. Обход JSON-данных ..................................................500
Стр.19