2016-03-23 2 views
-1

Я пытаюсь написать \1 в строке, но я не могу этого сделать. Я был бы признателен, если бы кто-нибудь помог мне с этим странным поведением. Here - пример с некоторыми пояснениями.Как написать 1 в строке

EDIT: Добавление пример вывода

puts "\1 <- null"

puts "\\1 <- slash one"

работает!

но набрав "\1" "\\1"

в командной строке IRB дает

"\1"

=> "\u0001

"\\1"

=> "\\1"

+2

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

+0

Вы хотите буквально * обратную косую черту 1 *? – tadman

+0

Добро пожаловать в переполнение стека. Пожалуйста, прочитайте «[ask]» и «[mcve]». Мы ожидаем, что вы включите свой код и доказательства усилий в самом вопросе, а не в ссылку на другое место. Связи гниют, потом ломаются, оставляя ваш вопрос никому не нужным. –

ответ

5

Есть несколько способов получить его:

"\\1" 
'\1' 
?\\ + ?1 

Помните, что так оно и будет отображаться всегда "\\1", что означает буквальное обратную косую черту, один, который является то, что вы хотите. Способ узнать, что это правильно, чтобы использовать puts:

puts "\\1" 
# => \1 

Внутри двойных кавычках, обратные косые имеют существенное значение. \n означает символ новой строки. В одинарных кавычках это два символа: обратная косая черта и n.

Вы даже можете проверить это:

"\\1".chars 
# => ["\\", "1"] 

'\1'.chars 
# => ["\\", "1"] 

Таким образом, вы можете видеть рубин интерпретации, что как два символа, а не три. Не обманывайте себя второй косой чертой внутри строки с двойными кавычками. Вот как изображается буквальная обратная косая черта.

+0

Спасибо за ваш ответ! – mhz

+0

@mhz Дайте мне знать, если это сработает, и если да, примите это как ваше решение. Легко для других людей найти этот путь. – tadman

0

Когда я в IRB и типа \1, возвращенное значение \u0001 что путь Руби из , представляющий характер.

Когда я пишу puts('\1), поведение в IRB одинаково и при запуске сценария. Я вижу карту юникод символов следующим

0 0 
0 1 

Это будет тот же результат на всех платформах (это зависит от того, как отображается юникода ). Поэтому, вероятно, поэтому вы не видите вывода на примере repl.it.

2

Вы попробовали puts '\1'? (одиночные кавычки вместо двойного) Я не уверен на 100%, что вы просите, но если это помогает, ура.

2

В вашей командной строке отображается «\ 1», потому что irb делает .inspect на объекте, который ускользает от строки. Таким образом, по существу \ 1 хранится правильно, но когда он отображает его, он добавляет еще один символ \, чтобы указать вам, что он экранирован.

Смежные вопросы