logo
Программирование на языке Ruby

2.2. Альтернативная нотация для представления строк

Иногда встречаются строки, в которых много метасимволов, например одиночных и двойных кавычек и т.д. В этом случае можно воспользоваться конструкциями %q и %Q. Вслед за ними должна идти строка, обрамленная с обеих сторон символами-ограничителями; лично я предпочитаю квадратные скобки ([]).

При этом %q ведет себя как одиночные кавычки, a %Q - как двойные.

S1 = %q[Как сказал Магритт, "Ceci n'est pas une pipe."]

s2 = %q[Это не табуляция: (\t)] # Равнозначно 'Это не табуляция: \t'

s3 = %Q[А это табуляция: (\t)]  # Равнозначно "А это табуляция: \t"

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

s1 = %q(Билл сказал: "Боб сказал: 'This is a string.'")

s2 = %q{Дpyгaя строка.}

s3 = %q<B этой строке есть специальные символы '" [ ] (){}.>

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

s1 = %q:"Я думаю, что это сделала корова г-жи О'Лири," сказал он.:

s2 = %q*\r - это control-M, a \n - это control-J.*