Понимание строковых литералов в Ruby

Строковые объекты держат упорядоченные последовательности байтов, обычно символов, обычно для формирования фрагментов читаемого человеком текста. Это очень распространенный тип объектов во всех языках программирования, и Рубин имеет несколько высокоуровневых и несколько низкоуровневых способов создания, доступа и управления объектами String.

Строки чаще всего создаются с Строковый литерал. буквальный это специальный синтаксис в языке Ruby, который создает объект определенного типа. Например, 23 это литерал, который создаетFixnum объект. Что касается строковых литералов, существует несколько форм.

Строки в одинарных и двойных кавычках

Большинство языков имеют строковый литерал, подобный этому, так что это может быть знакомо. Типы кавычек, '(одинарные кавычки, апостроф или жесткая цитата) и "(двойная кавычка или мягкая цитата) используются для включения строковых литералов, все что между ними будет превращено в объекты String. Следующий пример демонстрирует это.

Но есть некоторые различия между одинарными и двойными кавычками. Двойные кавычки или

instagram viewer
мягкие цитаты Позвольте немного магии случиться за кулисами. Наиболее полезным является интерполяция внутри строк, полезная для вставки значения переменной в середину строки. Это достигается с помощью #{ … } последовательность. В следующем примере вас спросят о вашем имени и поприветствуют, используя интерполяцию, чтобы вставить ваше имя в строковый литерал, который выдается.

Обратите внимание, что любой код может заключаться в фигурные скобки, а не только имена переменных. Ruby оценит этот код и, что бы он ни возвратил, попытается вставить его в строку. Так что вы могли бы так же легко сказать, «Привет, # {gets.chomp}» и забыть о имя переменная. Однако рекомендуется не помещать длинные выражения в фигурные скобки.

Одинарные кавычки, апострофы или жесткие цитаты гораздо более строгие. Внутри одинарных кавычек Ruby не будет выполнять интерполяцию или escape-последовательности кроме экранирования символа одинарных кавычек и обратной косой черты (\' и \\ соответственно). Если вы не собираетесь использовать интерполяцию, рекомендуется использовать одинарные кавычки чаще, чем нет.

В следующем примере будет сделана попытка интерполировать переменную внутри одинарных кавычек.

Если вы запустите это, вы не получите никакой ошибки, но что будет напечатано?

Последовательность интерполяции была передана без интерпретации.

Когда я должен использовать одинарные и двойные кавычки

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

Побег последовательности

Что если в строковом литерале вы хотите включить символ кавычки? Например, строка "Стив сказал" Му! " не сработает И не будет «Не могу прикоснуться к этому!. Обе эти строки включают в себя символ кавычки внутри строки, эффективно заканчивающий строковый литерал и вызывающий синтаксическую ошибку. Вы можете переключать символы кавычек, как Стив сказал "Му!", но это на самом деле не решает проблему. Вместо этого вы можете экранировать любой символ кавычки внутри строки, и он потеряет свое особое значение (в этом случае специальное значение - закрыть строку).

Чтобы убежать от символа, добавьте к нему символ обратной косой черты. Символ обратной косой черты говорит Ruby игнорировать любое специальное значение, которое может иметь следующий символ. Если это совпадающий символ кавычки, не заканчивайте строку. Если это знак хеша, не начинайте блок интерполяции. В следующем примере демонстрируется использование обратной косой черты для экранирования специальных символов.

Символ обратной косой черты можно использовать для удаления какого-либо специального значения из следующего символа, но, что сбивает с толку, его также можно использовать для обозначения специального поведения в строках в двойных кавычках. Большинство из этих особых способов поведения связано со вставкой символов и последовательностей байтов, которые не могут быть напечатаны или представлены визуально. Не все строки являются символьными или могут содержать последовательности управления, предназначенные для терминала, а не для пользователя. Ruby дает вам возможность вставлять эти типы строк, используя escape-символ обратной косой черты.

  • \ n - символ новой строки. путы Метод делает это автоматически, но если вы хотите вставить один в середине строки, или строка предназначена для чего-то другого, чем путы метод, вы можете использовать это, чтобы вставить новую строку в строку.
  • \ t - символ табуляции. Символ табуляции перемещает курсор (на большинстве терминалов) на кратное 8, так что это очень полезно для отображения табличных данных. Тем не менее, есть лучшие способы сделать это, и использование символа табуляции считается немного архаичным или хакерским.
  • \ nnn - Обратная косая черта, за которой следуют 3 числа, будет обозначать символ ASCII, представленный 3 восьмеричными цифрами. Почему восьмеричный? Главным образом по историческим причинам.
  • \ xnn - Обратная косая черта, x и 2 шестнадцатеричные цифры. Так же, как восьмеричная версия, только с шестнадцатеричными цифрами.

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

На следующей странице обсуждаются многострочные строки и альтернативный синтаксис для строковых литералов.

Многострочные строки

Большинство языков не допускают многострочные строковые литералы, но Ruby это делает. Нет необходимости заканчивать строки и добавлять дополнительные строки для следующей строки, Ruby прекрасно обрабатывает многострочные строковые литералы по умолчанию синтаксис.

Альтернативный синтаксис

Как и в большинстве других литералов, Ruby предоставляет альтернативный синтаксис для строковых литералов. Например, если вы используете много символов кавычек внутри своих литералов, вы можете использовать этот синтаксис. Когда вы используете этот синтаксис, это вопрос стиля, они обычно не нужны для строк.

Чтобы использовать альтернативный синтаксис, используйте следующую последовательность для строк в одинарных кавычках % q {…}. Точно так же используйте следующий синтаксис для строк в двойных кавычках % Q {…}. Этот альтернативный синтаксис следует тем же правилам, что и их «нормальные» кузены. Также обратите внимание, что вы можете использовать любые символы вместо фигурных скобок. Если вы используете фигурную скобку, квадратную скобку, угловую скобку или скобку, соответствующий символ завершит литерал. Если вы не хотите использовать совпадающие символы, вы можете использовать любой другой символ (любой, кроме буквы или цифры). Литерал будет закрыт другим символом того же символа. В следующем примере показано несколько способов использования этого синтаксиса.

Альтернативный синтаксис также работает как многострочная строка.

instagram story viewer