我试图在字符串中写\1
,但我无法做到。如果有人帮我解决这个奇怪的行为,我将不胜感激。 Here是一个有一些解释的例子。
编辑:添加示例输出
puts "\1 <- null"
puts "\\1 <- slash one"
作品!
但打字
"\1"
"\\1"
在irb命令行中产生
"\1"
=> "\u0001
"\\1"
=> "\\1"
答案 0 :(得分:5)
有几种方法可以实现它:
"\\1"
'\1'
?\\ + ?1
请记住,它显示的方式始终是"\\1"
,这意味着文字反斜杠,一个,这就是你想要的。知道这是正确的方法是使用puts
:
puts "\\1"
# => \1
在双引号字符串中,反斜杠具有重要意义。 \n
表示换行符。在单引号字符串中,有两个字符:反斜杠和n
。
你甚至可以测试一下:
"\\1".chars
# => ["\\", "1"]
'\1'.chars
# => ["\\", "1"]
所以你可以看到Ruby将其解释为两个字符,而不是三个字符。不要被双引号字符串中的第二个反斜杠所欺骗。这就是如何表示字面反斜杠。
答案 1 :(得分:2)
你试过puts '\1'
吗? (单引号而不是双引号)
我不是100%肯定你在问什么,但如果这有帮助,那就欢呼吧。
答案 2 :(得分:2)
您的命令行显示“\ 1”,因为irb对该对象执行.inspect,它会转义该字符串。所以基本上\ 1是正确存储的,但是当它显示它时,它会添加另一个\来指示它已被转义
答案 3 :(得分:0)
当我在IRB并输入\1
时,返回的值是\u0001
,这是Ruby的方式
代表角色。
当我写puts('\1
)时,IRB和运行时的行为是相同的
一个脚本。我看到一个unicode字符映射如下
0 0
0 1
这在所有平台上都不是相同的输出(取决于unicode的方式) 显示)。这就是为什么你在repl.it例子中看不到输出的原因。