Как использовать escape-символы в строках - PullRequest
3 голосов
/ 19 декабря 2011

Я пробираюсь через Ruby Koans и меня смущают примеры "escape-предложений и строк в одинарных кавычках".

Один пример показывает, что я действительно не могу использовать escape-символы таким образом, но сразу после этого приводится следующий пример:

def test_single_quotes_sometimes_interpret_escape_characters
  string = '\\\''
  assert_equal 2, string.size # <-- my answer is correct according to the program
  assert_equal "\\'", string  # <-- my answer is correct according to the program
end

Это сбило меня с толку по двум направлениям:

  1. Иногда можно использовать одинарные кавычки с управляющими символами.
  2. Почему размер строки 2, когда assert_equal равен "\\\'"?(Я лично думал, что ответом будет "\'", что будет иметь больше смысла в отношении размера).

Ответы [ 2 ]

11 голосов
/ 19 декабря 2011

Вы можете разбить ваш string на две части, чтобы прояснить ситуацию:

string = '\\' + '\''

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

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

Символ одинарных кавычек не имеет специального значения в двойномстроковый литерал в кавычках, так что вы можете сказать "'" без каких-либо затруднений.Обратная косая черта, однако, имеет специальное значение в строках с двойными кавычками, поэтому вы должны сказать "\\", чтобы получить одну обратную косую черту в вашей строке с двойными кавычками.

Считайте, что вы угадали "\'".Одинарная кавычка не имеет особого значения в строке с двойными кавычками, и экранирование чего-то, что не требует экранирования, просто возвращает вам что-то ;Итак, если c является символом, который не нужно экранировать внутри строки в двойных кавычках, тогда \c будет просто c.В частности, "\'" оценивается как "'" (то есть одна одиночная кавычка в строке с двойными кавычками).

В результате получается:

  • '\\\'' == "\\'"
  • "\\\"" == '\\"'
  • "\'" == '\''
  • "\'" == "'"
  • '\\\''.length == 2
  • "\\\"".length == 2
  • "\'".length == 1
  • "'".length == 1

Ссылка Wikibooks , которую Кассим дал, охватывает эти вещи.

Обычно я переключаюсь на %q{}(аналогично одинарным кавычкам) или %Q{} (аналогично двойным кавычкам) когда мне нужно получить кавычки в строки, все обратные косые черты заставляют мои глаза кровоточить.

0 голосов
/ 19 декабря 2011

Возможно, стоит прочитать: http://en.wikibooks.org/wiki/Ruby_Programming/Strings

ruby-1.9.3-p0 :002 > a = '\\\''
 => "\\'" 
ruby-1.9.3-p0 :003 > a.size
 => 2 
ruby-1.9.3-p0 :004 > puts a
\'

В одинарных кавычках есть только два escape-символа: \\ и \'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...