Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Это не знак табуляции: tа это не символ новой строки: nEOFЕсли концевому маркеру встроенного документа предшествует дефис, то маркер может начинаться с красной строки. При этом удаляются только пробелы из той строки, на которой расположен сам маркер, но не из предшествующих ей строк документа.
str = <<-EOF Каждая из этих строк начинается с пары пробелов. EOFОпишу стиль, который нравится лично мне. Предположим, что определен такой метод
marginclass String def margin arr = self.split("n") # Разбить на строки. arr.map! {|x| x.sub!(/s*|/,"")) # Удалить начальные символы. str = arr.join("n") # Объединить в одну строку. self.replace(str) # Подменить исходную строку. endendДля ясности я включил подробные комментарии. В этом коде применяются конструкции, которые будут рассмотрены ниже
—str = <<end.margin |Этот встроенный документ имеет "левое поле" |на уровне вертикальной черты в каждой строке. | | Можно включать цитаты, | делать выступы и т.д.endВ качестве концевого маркера естественно употребить слово
endend2.4. Получение длины строки
Для получения длины строки служит метод
lengthsizestr1 = "Карл"x = str1.length # 4str2 = "Дойль"x = str2.size # 52.5. Построчная обработка
Строка в Ruby может содержать символы новой строки. Например, можно прочитать в память файл и сохранить его в виде одной строки. Применяемый по умолчанию итератор each в этом случае перебирает отдельные строки:
str = "Когда-тоnдавным-давно...nКонецn"num = 0str.each do |line|num += 1print "Строка #{num}: #{line}"endВыполнение этого кода дает следующий результат:
Строка 1: Когда-тоСтрока 2: давным-давно...Строка 3: КонецАльтернативно можно было бы воспользоваться методом
each_with_index2.6. Побайтовая обработка
Поскольку на момент написания этой книги язык Ruby еще не поддерживал интернационализацию в полной мере, то символ и байт
—each_bytestr = "ABC"str.each_byte {|char| print char, " " }#Результат: 65 66 67.В текущей версии Ruby строку можно преобразовать в массив односимвольных строк с помощью метода
scanstr = "ABC"chars = str.scan(/./)chars.each {|char| print char, " " }#Результат: ABC.2.7. Специализированное сравнение строк
В язык Ruby уже встроен механизм сравнения строк: строки сравниваются в привычном лексикографическом порядке (то есть на основе упорядочения, присущего данному набору символов). Но при желании можно задать собственные правила сравнения любой сложности.
Предположим, например, что мы хотим игнорировать английские артикли a, an и the, если они встречаются в начале строки, а также не обращать внимания на большинство знаков препинания. Для этого следует переопределить встроенный метод
<=><<=>>=class String alias old_compare <=> def <=>(other) a = self.dup b = other.dup # Удалить знаки препинания. a.gsub!(/[,.?!:;]/, "") b.gsub!(/[,.?!:;]/, "") # Удалить артикли из начала строки. a.gsub!(/^(a |an | the )/i, "") b.gsub!(/^(a |an | the )/i, "") # Удалить начальные и хвостовые пробелы. a.strip! b.strip! # Вызвать старый метод <=>. # a.old_compare(b) endendtitle1 = "Calling All Cars"
