Обратные слеши в одиночных кавычках и двойными кавычками
Если я добавлю обратную косую черту + пробел в начало строк с двойными и одиночными кавычками, я получу разные результаты:
" text"
' text'
в выводе для строки с двойными кавычками я вижу только пробел.
В выходных данных для строки с одной кавычкой я вижу обратную косую черту+пробел.
что там происходит? Это потому что ' '
интерпретируется как специальный символ в строке двойной кавычки, но в строке с одной кавычкой символы сохраняются как есть?
Если Я измените строки на это, я вижу тот же вывод, а именно одну косую черту, за которой следует пробел, а затем текст:
" text"
' text'
В обоих случаях обратная косая черта сбежал. Я не понимаю, почему они работают одинаково в этой ситуации.
есть ли какое-то правило, которое помогло бы объяснить фундаментальную разницу между тем, как одинарные кавычки и двойные кавычки обрабатывают обратные косые черты в Ruby?
6 ответов
Я бы направил вас к"Ruby Программирование / Строки " для очень краткого, но всеобъемлющего обзора различий.
из ссылки:
puts "Betty's pie shop"
puts 'Betty\'s pie shop'
поскольку "Betty's" содержит апостроф, который является тем же символом, что и одинарная кавычка, во второй строке нам нужно использовать обратную косую черту, чтобы избежать Апострофа, чтобы Ruby понимал, что Апостроф находится в строковом литерале вместо того, чтобы отмечать конец строкового литерала. Обратный слеш с одиночной кавычки называется Escape-последовательностью.
строки с двойными кавычками поддерживают полный диапазон escape-последовательностей, как показано ниже:
-
\a
звонок/оповещение (0x07) -
\b
клавиша "Backspace" (бит 0x08) -
\e
побег (0x1b) -
\f
Formford (0x0c) -
\n
новая строка (0x0a) -
\r
Return (0x0d) -
\s
пробел (0x20) -
\t
Tab (0x09) - вертикальная (0x0b)
для строк с одной кавычкой две последовательные обратные косые черты заменяются одной обратной косой чертой, а обратная косая черта, за которой следует одна кавычка, становится одной кавычкой:
'escape using "\"' -> escape using "\"
'That\'s right' -> That's right
Ruby интерпретирует только escape-последовательности в строках с двойными кавычками. В одной цитируемой строке только \
(косая черта обратная косая черта) и \'
(обратная косая черта) берутся как специальные символы. Вы должны использовать строки с двойными кавычками только тогда, когда вам нужно больше интерпретации. В противном случае одинарные кавычки обеспечивают повышение производительности.
когда вы упомянули, включая имя переменной, Ruby никогда этого не делает. Просто имя переменной рассматривается как строковый литерал. К включите значение переменной (или любого выражения) поместите выражение следующим образом:
"#{variable}"
обратите внимание, что это работает только в двойных кавычках. Чтобы добавить переменную в одну кавычку, вам нужно сделать следующее:
'The value of X is: '+X
Если вам нужно серьезное форматирование, посмотрите версию sprintf и printf Ruby. Они в значительной степени обертки вокруг функций C и довольно мощные, но немного громоздкие в использовании.
Это не полный ответ (так как на простой вопрос уже был дан ответ), а скорее дополнительная информация.
какой стиль цитирования строки Ruby вы предпочитаете?
Не используйте двойные кавычки, если вы должны сбежать от них. И не влюбляйся в "одинокую". vs двойные кавычки " ловушка. Руби превосходная поддержка для произвольного разделители для строковых литералов:
Я последовал этому совету и никогда не оглядывался назад!
это потому, что '\ ' это интерпретируется как специальный символ в строка двойной кавычки, но в один цитирует строку символов сохранились как есть?
да. Строки с одинарными кавычками рассматриваются как литералы; строки с двойными кавычками интерполируются. Это то же самое в других Ruby-подобных языках и не изменилось в 1.9.