Чтение онлайн

на главную - закладки

Жанры

Программирование на языке Ruby
Шрифт:

str = "abcxyz"

s1 = str.chop # "abcxy"

Поскольку символ новой строки присутствует не всегда, иногда удобнее применять метод

chomp
:

str = "abcxyz"

str2 = "123\n"

str3 = "123\r"

str4 = "123\r\n"

s1 = str.chomp # "abcxyz"

s2 = str2.chomp # "123"

# Если установлен стандартный разделитель записей, то удаляется не только

# \n, но также \r и \r\n.

s3 = str3.chomp # "123"

s4 = str4.chomp # "123"

Как и следовало ожидать, имеется также метод

chomp!
для замены «на месте». Если методу
chomp
передана строка-параметр, то удаляются перечисленные в ней символы, а не подразумеваемый по умолчанию разделитель записей. Кстати, если разделитель записей встречается в середине строки, то он не удаляется:

str1 = "abcxyz"

str2 = "abcxyz"

s1 = str1.chomp("yz") # "abcx"

s2 = str2.chomp("x") # "abcxyz"

2.19. Удаление лишних пропусков

Метод

strip
удаляет пропуски в начале и в конце строки, а вариант
strip!
делает то же самое «на месте».

str1 = "\t \nabc \t\n"

str2 = str1.strip # "abc"

str3 = str1.strip! # "abc"

#str1 теперь тоже равно "abc".

Под пропусками, как обычно, понимаются пробелы, символы табуляции и перевода на новую строку.

Чтобы удалить пропуски только в начале или только в конце строки, применяйте методы

lstrip
и
rstrip
:

str = " abc "

s2 = str.lstrip # "abc "

s3 = str.rstrip # " abc"

Имеются также варианты

lstrip!
и
rstrip!
для удаления «на месте».

2.20. Повтор строк

В Ruby оператор (или метод) умножения перегружен так, что в применении к строкам выполняет операцию повторения. Если строку умножить на n, то получится строка, состоящая из n конкатенированных копий исходной:

etc = "Etc. "*3 # "Etc. Etc. Etc. "

ruler = " + " + (". "*4+"5" + "."*4+" + ")*3

# "+....5....+....5....+....5....+"

2.21. Включение выражений в строку

Это легко позволяет сделать синтаксическая конструкция

#{}
. Нет нужды думать о преобразовании, добавлении и конкатенации; нужно лишь интерполировать переменную или другое выражение в любое место строки:

puts "#{temp_f} по Фаренгейту равно #{temp_c} по Цельсию"

puts "Значение определителя равно #{b*b — 4*а*с}."

puts "#{word} это #{word.reverse} наоборот."

Внутри фигурных скобок могут находиться даже полные предложения. При этом возвращается результат вычисления последнего выражения.

str = "Ответ равен #{ def factorial(n)

 n==0 ? 1 : n*factorial(n-1)

end

answer = factorial(3) * 7}, естественно."

# Ответ равен 42, естественно.

При интерполяции глобальных переменных, а также переменных класса и экземпляра фигурные скобки можно опускать:

print "$gvar = #$gvar и ivar = #@ivar."

Интерполяция не производится внутри строк, заключенных в одиночные кавычки (поскольку их значение не интерпретируется), но применима к заключенным в двойные кавычки встроенным документам и к регулярным выражениям.

2.22. Отложенная интерполяция

Иногда желательно отложить интерполяцию значений в строку. Идеального способа решить эту задачу не существует, но можно воспользоваться блоком:

str = proc {|x,у,z| "Числа равны #{x}, #{у} и #{z}" }

s1 = str.call(3,4,5) # Числа равны 3, 4 и 5.

s2 = str.call(7,8,9) # Числа равны 7, 8 и 9.

Другое, более громоздкое решение состоит в том, чтобы сохранить строку, заключенную в одиночные кавычки, потом «обернуть» ее двойными кавычками и вычислить:

str = '#{name} - мое имя, а #{nation} - моя родина'

name, nation = "Стивен Дедал", "Ирландия"

s1 = eval('"' + str + '"')

# Стивен Дедал - мое имя, а Ирландия - моя родина.

Можно также передать

eval
другую функцию привязки:

bind = proc do

 name,nation = "Гулливер Фойл", "Земля"

 binding

end.call # Надуманный пример; возвращает привязанный контекст блока

s2 = eval('"' + str + '"',bind)

# Гулливер Фойл - мое имя, а Земля - моя родина.

У техники работы с

eval
есть свои «причуды». Например, будьте осторожны, вставляя управляющие последовательности, скажем
\n
.

2.23. Разбор данных, разделенных запятыми

Данные, разделенные запятыми, часто встречаются при программировании. Это в некотором роде «наибольший общий делитель» всех форматов обмена данными. Например, так передаются данные между несовместимыми СУБД или приложениями, которые не поддерживают никакого другого общего формата.

Поделиться:
Популярные книги

Я царь. Книга XXVIII

Дрейк Сириус
28. Дорогой барон!
Фантастика:
боевая фантастика
аниме
попаданцы
5.60
рейтинг книги
Я царь. Книга XXVIII

Воронцов. Перезагрузка. Книга 3

Тарасов Ник
3. Воронцов. Перезагрузка
Фантастика:
попаданцы
альтернативная история
фэнтези
фантастика: прочее
6.00
рейтинг книги
Воронцов. Перезагрузка. Книга 3

Ожерелье Странника

Хаггард Генри Райдер
Приключения:
исторические приключения
7.50
рейтинг книги
Ожерелье Странника

Последний реанорец. Том IV

Павлов Вел
3. Высшая Речь
Фантастика:
фэнтези
5.20
рейтинг книги
Последний реанорец. Том IV

Полнолуние

Робардс Карен
Любовные романы:
остросюжетные любовные романы
8.87
рейтинг книги
Полнолуние

Сборник коротких эротических рассказов

Коллектив авторов
Любовные романы:
эро литература
love action
7.41
рейтинг книги
Сборник коротких эротических рассказов

Эпоха Опустошителя. Том IV

Павлов Вел
4. Вечное Ристалище
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Эпоха Опустошителя. Том IV

Менталист. Трансформация

Еслер Андрей
4. Выиграть у времени
Фантастика:
фэнтези
альтернативная история
7.28
рейтинг книги
Менталист. Трансформация

Параллельные миры

Каку Митио
Научно-образовательная:
прочая научная литература
8.11
рейтинг книги
Параллельные миры

Наномашины, "Шива"! Том 7

Новиков Николай Васильевич
7. Первый среди карапузов
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Наномашины, Шива! Том 7

Я – Стрела. Трилогия

Суббота Светлана
Я - Стрела
Любовные романы:
любовно-фантастические романы
эро литература
6.82
рейтинг книги
Я – Стрела. Трилогия

Апокриф

Вайс Александр
10. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
космоопера
5.00
рейтинг книги
Апокриф

Последний Паладин

Саваровский Роман
1. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин

Вольный Лекарь. Ученик. Трилогия

Карелин Сергей Витальевич
Вольный лекарь
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Вольный Лекарь. Ученик. Трилогия