Когда вы видите, что Ruby показывает что-то вроде:
"asdf \\& asdf"
Это разбито на токены \\
(обратный слеш) и &
(амперсанд), где первый обратный слеш является особенным, второй - этофактический характер.Вы можете прочитать это как " literal backslash".
При печати вы видите фактическую строку.Это правильно.
Внутренне двойные обратные слеши на самом деле отсутствуют, это просто следствие того, как должны обрабатываться строки в двойных кавычках.
Это необходимо для того, чтобы \n
и \r
и другие управляющие символы работают, но вы также можете использовать фактическую обратную косую черту.Существует большая разница между \n
(перевод строки) и \\n
( литерал буква обратной косой черты n).
Это часто встречается при работе с форматами данных, которые имеют специальные символы.Например, в формататорах стиля printf
значение %
имеет значение, поэтому для печати фактического %
вам нужно удвоить его:
'%.1f%%' % 10.3
#=> "10.3%"
Каждый формат будет иметь свои особенности и проблемы.HTML не рассматривает обратную косую черту как особую, но он делает <
и >
и &
, поэтому вместо амперсанда вы увидите &
.