Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Этот параметр подчиняется тем же правилам, что и параметр метода
count-^delete!2.32. Печать специальных символов
Метод
dumps1 = "Внимание" << 7 << 7 << 7 # Добавлено три символа ASCII BEL.puts s1.dump # Печатается: Внимание 07 07 07s2 = "abcttdeftghinn"puts s2.dump # Печатается: abcttdeftghinns3 = "Двойная кавычка: ""puts s3.dump # Печатается: Двойная кавычка: "При стандартном значении переменной
$KCODEdumpinspect$KCODE2.33. Генерирование последовательности строк
Изредка бывает необходимо получить «следующую» строку. Так, следующей для строки
"aaa""aab""aac""aad"succdroid = "R2D2"improved = droid.succ # "R2D3"pill = "Vitamin B"pill2 = pill.succ # "Vitamin C"He рекомендуется применять этот метод, если точно не известно, что начальное значение предсказуемо и разумно. Если начать с какой-нибудь экзотической строки, то рано или поздно вы получите странный результат.
Существует также метод
uptosucc"Files, A".upto "Files, X" do | letter | puts "Opening: #{letter}"end# Выводится 24 строки.Еще раз подчеркнем, что эта возможность используется редко, да и то на ваш страх и риск. Кстати, метода, возвращающего «предшествующую» строку, не существует.
2.34. Вычисление 32-разрядного CRC
Контрольный код циклической избыточности (Cyclic Redundancy Checksum, CRC) — хорошо известный способ получить «сигнатуру» файла или произвольного массива байтов. CRC обладает тем свойством, что вероятность получения одинакового кода для разных входных данных равна 1/2**N, где N — число битов результата (чаще всего 32).
Вычислить его позволяет библиотека zlib, написанная Уэно Кацухиро (Ueno Katsuhiro). Метод
crc32require 'zlib'include Zlibcrc = crc32("Hello") # 4157704578crc = crc32(" world!",crc) # 461707669crc = crc32("Hello world!") # 461707669 (то же, что и выше)В качестве необязательного второго параметра можно передать ранее вычисленный CRC. Результат получится такой, как если бы конкатенировать обе строки и вычислить CRC для объединения. Это полезно, например, когда нужно вычислить CRC файла настолько большого, что прочитать его можно только по частям.
2.35. Вычисление МD5-свертки строки
Алгоритм MD5 вырабатывает 128-разрядный цифровой отпечаток или дайджест сообщения произвольной длины. Это разновидность свертки, то есть функция шифрования односторонняя, так что восстановить исходное сообщение по дайджесту невозможно. Для Ruby имеется расширение, реализующее MD5; интересующиеся могут найти его в каталоге
ext/md5Для создания нового объекта MD5 есть два эквивалентных метода класса:
newmd5require 'md5'hash = MD5.md5hash = MD5.newЕсть также четыре метода экземпляра:
clonedigesthexdigestupdatecloneupdatehash.update("Дополнительная информация...")Можно создать объект и передать ему данные за одну операцию:
secret = MD5.new("Секретные данные")Если задан строковый аргумент, он добавляется к объекту путем обращения к методу
update# Эти два предложения:сryptic.update("Данные...")cryptic.update(" еще данные.")# ... эквивалентны одному такому:cryptic.update("Данные... еще данные.")Метод
digestНо наиболее полезен метод
hexdigestdef hexdigest ret = '' digest.each_byte {|i| ret << sprintf{'%02x' , i) } retendsecret.hexdigest # "b30e77a94604b78bd7a7e64ad500f3c2"Короче говоря, для получения MD5-свертки нужно написать:
