Для представления длинной строки, занимающей несколько строк в тексте, можно,
конечно, воспользоваться обычными строками в кавычках:
str = "Три девицы под окном
Пряли поздно вечерком..."
Но тогда отступ окажется частью строки.
Можно вместо этого воспользоваться встроенным документом, изначаль
предназначенным для многострочных фрагментов. (Идея и сам термин заимств
ваны из более старых языков.) Синтаксически он начинается с двух знаков «,
которыми следует концевой маркер, нуль или более строк текста и в завершени
тот же самый концевой маркер в отдельной строке:
str = «EOF
Три девицы под окном
Пряли поздно вечерком...
EOF
Но следите внимательно, чтобы после завершающего концевого маркера н
было пробелов. В текущей версии Ruby маркер в такой ситуации не распознаете
Встроенные документы могут быть вложенными. В примере ниже показан
как передать методу три представленных таким образом строки:
some_method(«serl, «str2, «str3)
первый кусок
текста...
strl
второй кусок...
str2
третий кусок
текста.
str3
По умолчанию встроенный документ ведет себя как строка в двойных кавычках,
то есть внутри него интерпретируются управляющие последовательности и
интерполируются выражения. Но если концевой маркер заключен в одиночные
кавычки, то и весь документ ведет себя как строка в одиночных кавычках:
str = «'EOF'
Это не знак табуляции: \t
а это не символ новой строки: \п
EOF
Если концевому маркеру встроенного документа предшествует дефис, то маркер
может начинаться с красной строки. При этом удаляются только пробелы из
той строки, на которой расположен сам маркер, но не из предшествующих ей строк
документа.
str = «-EOF
Каждая из этих строк
начинается с пары
пробелов.
. EOF
Опишу стиль, который нравится лично мне. Предположим, что определен такой
метод margin:
class String
def margin
arr = self.split("\n")
arr.map! {]xl x.sub!(As*\I/,"") }
str = arr.join("\n")
self.replace(str)
end
# Разбить на строки.
# Удалить начальные символы
# Объединить в одну строку.
п Подменить исходную строку
end
Для ясности я включил подробные комментарии. В этом коде применяются конструкции,
которые будут рассмотрены ниже - как в этой, так н в последующих главах.
Используется этот метод так:
str = <
