Обратная косая черта в строках с одинарными кавычками по сравнению сстроки в двойных кавычках

StackOverflow https://stackoverflow.com/questions/648156

Вопрос

Если я добавлю обратную косую черту + пробел в начало строк с двойными и одинарными кавычками, я получу разные результаты:

"\ text"
'\ text' 

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

Что там происходит?Это потому, что '\ ' интерпретируется как специальный символ в строке с двойными кавычками, но в строке с одинарными кавычками символы сохраняются как есть?

Если я изменю строки на это, я увижу тот же результат, а именно одну косую черту, за которой следует пробел, а затем текст:

"\\ text"
'\\ text' 

В обоих случаях обратная косая черта экранируется.Я не понимаю, почему в этой ситуации они работают одинаково.

Есть ли какое-то правило, которое помогло бы объяснить фундаментальную разницу между тем, как строки в одинарных и двойных кавычках обрабатывают обратную косую черту в Ruby?

Это было полезно?

Решение

Я бы отослал вас к "Программирование на Ruby/Строки" за очень краткий, но всесторонний обзор различий.

Из ссылки:

puts "Betty's pie shop"

puts 'Betty\'s pie shop'

Поскольку «Betty's» содержит апостроф, который является тем же символом, что и одинарная кавычка, во второй строке нам нужно использовать обратную косую черту, чтобы избежать апострофа, чтобы Ruby понял, что апостроф находится в строковом литерале, а не отмечает конец строковый литерал.Обратная косая черта, за которой следует одинарная кавычка, называется escape-последовательностью.

Другие советы

Строки в двойных кавычках поддерживают весь диапазон escape-последовательностей, как показано ниже:

  • \a Звонок/оповещение (0x07)
  • \b Backspace (0x08)
  • \e Побег (0x1b)
  • \f Формфорд (0x0c)
  • \n Новая строка (0x0a)
  • \r Возврат (0x0d)
  • \s Пробел (0x20)
  • \t Вкладка (0x09)
  • \v Вертикальная вкладка (0x0b)

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

'escape using "\\"' -> escape using "\"
'That\'s right'     -> That's right

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

Когда вы упомянули включение имени переменной, Ruby никогда этого не делает. Просто имя переменной рассматривается как строковый литерал. Чтобы включить значение переменной (или любого выражения), поместите выражение следующим образом:

"#{variable}"

Обратите внимание, что это работает только в двойных кавычках. Чтобы добавить переменную в одиночную кавычку, вам нужно сделать это:

'The value of X is: '+X

Если вам нужно серьезное форматирование, загляните в версии Ruby sprintf и printf. Они в значительной степени являются обертками для функций C и довольно мощные, но немного громоздкие в использовании.

Это потому, что «» интерпретируется как особый символ в строке двойной цитаты, но в одной цитируемой строке символы сохраняются как есть?

Да.Строки в одинарных кавычках рассматриваются как литералы;Строки в двойных кавычках интерполируются.То же самое и в других Ruby-подобных языках и не изменилось в версии 1.9.

вы можете сделать <%= f.label :nom_entreprise, "Nom de l'entreprise" %>

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top