如何在Ruby中打印带反斜杠的字符串

6

我有一个字符串str = "xyz\123",我想要按原样打印它。

IRB给了我一个意外的输出。请看下面的内容:

1.9.2p290 :003 > str = "xyz\123"
 => "xyzS" 
1.9.2p290 :004 > 

有什么办法可以让IRB打印出原始字符串,即"xyz\123"吗?
谢谢。
更新:
我尝试了转义,但由于某些原因似乎并不简单。请在下面找到我对同一问题的尝试:
1.9.2p290 :004 > str = "xyz'\'123"
 => "xyz''123" 
1.9.2p290 :005 > str = "xyz'\\'123"
 => "xyz'\\'123" 
1.9.2p290 :006 > str = "xyz'\\\'123"
 => "xyz'\\'123" 
1.9.2p290 :007 > 

1
"只需转义它。" 或者 "阅读教程"。随便选一个。你可能还需要使用.inspect - user166390
1
我想知道为什么这个问题被踩了。 - boddhisattva
4个回答

5

更新的答案:

转义符“\”在纯Ruby代码中始终有效,但在“Ruby控制台”中并不总是有效。因此,我建议您编写一个单元测试:

# escape_token_test.rb 
require 'test/unit'
class EscapeTokenTest < Test::Unit::TestCase
  def test_how_to_escape
    hi = "hi\\backslash"
    puts hi
  end 
end

您将会得到以下结果:

hi\backslash

并查看@pst的评论。

1
我尝试过了,它不起作用。它会打印两次反斜杠。输出为:"xyz\123"。 - boddhisattva
@boddhisattva,没错。请看我在Hophat回答下方的评论。 - user166390

3

反斜杠字符是一个转义字符。你可能已经见过"\n"用于显示新行,这就是原因。"\123"会计算出ASCII码为83的字符"S"。要打印反斜杠,请使用2个反斜杠。所以你可以使用str = "xyz\\123"


1
我尝试了这个,但是它不起作用。它会打印两次反斜杠。输出结果为:"xyz\123" - boddhisattva
1
@boddhisattva 这是正确的,因为REPL打印出来的是“.inspect”表单,对于字符串来说就是双引号形式,可以通过“eval”返回到原始对象的等效形式。尝试一下:puts str然后进行比较。 - user166390
@pst 谢谢..现在可以了..所以这只是在Rails控制台和IRB中,它不会像“puts str”一样打印出来? - boddhisattva

0

如何打印反斜杠?

使用2个反斜杠,例如"xyz\\123"

为什么"xyz\123"会被解释为"xyzS"

在双引号字符串中,\nnn是一个八进制转义符

Table 22.2. Substitutions in Double-Quoted Strings

Thomas, D. (2009) 《Programming Ruby》, 第329页

因此,八进制数123
= (64 * 1) + (8 * 2) + 3
= 十进制数83
= ASCII码中的S


1
这与打印反斜杠有什么关系? - max pleaner

-1

很简单...尝试使用dump函数:

mystring = %Q{"Double Quotes"}
p mystring.dump
=> "\"\\\"Double Quotes\\\"\""
p mystring
=>"\"Double Quotes\""

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接