Есть ли в ruby ​​способ полностью убрать экранирующие символы из строк? - PullRequest
0 голосов
/ 13 апреля 2019

Я создаю рубиновый драгоценный камень, который отображает искусство ASCII в командной строке.Поскольку искусство ASCII включает в себя очень много разных типов символов, мне трудно понять, как обращаться с escape-символами (обратная косая черта).

Было бы замечательно, если бы я мог изменить символ обратной косой черты на что-то менее распространенное для этого конкретного драгоценного камня, хотя я не могу найти какую-либо информацию о том, как это сделать.Кроме того, я подозреваю, что это может вызвать больше проблем со специальными символами, которые выражаются с помощью обратной косой черты (например, табуляции и возврата новой строки).

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

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

"How \ are \\ you \\\ doing \\\\ this \\\\\ afternoon"

Я хотел бы взять приведенный выше строковый ввод и поместить его точно так, как показано.Но когда я это выражаю, оно показывает:

 => "How  are \\ you \\ doing \\\\ this \\\\ afternoon"

Если я использую одинарные кавычки, я получаю следующее:

 => How  are \ you \ doing \\ this \\ afternoon

Это приложение, которое я создаю, действительно для меня просто забавный проект,но мне любопытно, как следует подходить к такой ситуации в рубине.

Заранее благодарим вас за ваше время и идеи!

Редактировать:

Пример упрощен.В конечном итоге я буду использовать искусство ASCII (см. Здесь: https://www.asciiart.eu/mythology/skeletons).Я ищу абстрактный способ изменения произведений искусства ASCII, чтобы они правильно отображались в окне терминала с помощью путов!

Ответы [ 2 ]

2 голосов
/ 13 апреля 2019

Используйте обратную косую черту, чтобы экранировать обратную косую черту в двойных кавычках.

puts "How \\ are \\\\ you \\\\\\ doing \\\\\\\\ this \\\\\\\\\\ afternoon"

# will print
# How \ are \\ you \\\ doing \\\\ this \\\\\ afternoon

Другой способ использования heredoc с одинарными кавычками

puts <<~'TEXT'
How \ are \\ you \\\ doing \\\\ this \\\\\ afternoon
TEXT

# will print
# How \ are \\ you \\\ doing \\\\ this \\\\\ afternoon
1 голос
/ 13 апреля 2019

Удаление обратной косой черты в строковых литералах является частью синтаксического анализатора Ruby - вы не можете просто отключить это. И будучи частью синтаксического анализатора, он работает только для литералов, которые являются частью самого кода программы. Но если вы читаете строку из файла, STDIN или чего-либо еще, она читается как есть.

Просто попробуйте поместить эту строку в файл, а затем

puts File.readlines(<filename>) # => How \ are \\ you \\\ doing \\\\ this \\\\\ afternoon

Так что, если вам нужны эти сумасшедшие последовательности обратной косой черты в самом коде ruby ​​- избегайте обратной косой черты вручную. Но если вы читаете их как входные данные для вашей программы, она должна работать "из коробки" ...

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