Как напечатать обратную косую черту в одинарных кавычках в ruby - PullRequest
0 голосов
/ 25 июня 2018

У меня есть следующая строка в версии ruby ​​2.3.3:

'\x89PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x01u\x00\x00\x01u\b'

Я хотел бы сравнить ее с другой строкой.Однако происходит следующее:

x = '\x89PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x01u\x00\x00\x01u\b'
 => "\\x89PNG\\r\\n\\x1A\\n\\x00\\x00\\x00\\rIHDR\\x00\\x00\\x01u\\x00\\x00\\x01u\\b"

Там, где добавление дополнительной косой черты портит сравнение.В равной степени сбивает с толку следующее:

 x.gsub("\\\\", "\\")
 => "\\x89PNG\\r\\n\\x1A\\n\\x00\\x00\\x00\\rIHDR\\x00\\x00\\x01u\\x00\\x00\\x01u\\b"

Я попытался заключить в двойные кавычки строку, используя% {} и% Q [].Ни один из них просто не хранит строку без интерпретации escape-последовательностей.Как мне сохранить эту строку, не изменяя ее?

1 Ответ

0 голосов
/ 25 июня 2018

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

str.bytes == other.bytes

Чтобы отобразить обратную косую черту, вы просто экранируете ее с помощью одной обратной косой черты:

puts '\\'
\

Дополнительно, в зависимости от вашего точного использования, можно использовать оператор <=>:

(str <=> other).zero?

РЕДАКТИРОВАТЬ

Чтобы немного расширитьболее того, есть разница в том, что отображается для вас, если вы только что сделали что-то вроде этого:

a = '\\'
p a
=> '\\'

Это покажет себя как две обратные косые черты, но на самом деле это все ещеодин символ, а не два.

a = '\\'
a.bytes
=> [92] # ASCII code for a backslash (single byte)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...