2012-04-10 46 views
6

我有一个字符串str = "xyz\123",我想按原样打印它。如何在Ruby中打印反斜杠的字符串

IRB给了我一个意想不到的输出。请看以下不同: -

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

我如何能得到IRB打印原始字符串即“某某\ 123”任何想法。

谢谢。

UPDATE

我试图逃跑,但它似乎并没有那么简单出于某种原因。请在下面找到我用同样的试验:

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'。 – 2012-04-10 04:54:23

+1

我不知道为什么这个问题被拒绝投票.. – boddhisattva 2012-04-18 06:04:43

回答

5

修订的答案:

逃生记号“\”总是以纯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 2012-04-10 05:02:38

+0

@boddhisattva这是正确的。在Hophat的答案下看到我的评论。 – 2012-04-10 05:07:27

+0

@boddhisattva,我更新了我的答案。 – 2012-04-10 05:26:27

3

反斜线字符是一个转义字符。你可能看到“\ n”被用来显示一个新行,这就是为什么。 “\ 123”将83代码的ASCII代码解析为“S”。要打印反斜杠,请使用2个反斜杠。所以你可以使用str = "xyz\\123"

+1

我试过了,它不起作用。它打印两次反斜杠。输出:“xyz \\ 123” – boddhisattva 2012-04-10 05:01:04

+1

@boddhisattva这是*正确的*,因为REPL打印了“.inspect”表单,对于字符串来说,这是双引号形式,可以将其“eval”编辑回原始目的。尝试:'放大str'并进行比较。 – 2012-04-10 05:06:19

+0

@pst谢谢..现在工作..所以它只是在Rails Console和IRB ..它不会像“puts str”一样打印? – boddhisattva 2012-04-10 05:32:29

0

如何打印反斜杠?

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

为什么"xyz\123"评价为"xyzS"

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

Table 22.2. Substitutions in Double-Quoted Strings

托马斯,D。(2009)编程红宝石,p.329

所以,八进制123
=(64 * 1)+(8 * 2)+ 3
=十进制83
= ASCII S

+0

这与打印反斜杠有什么关系? – 2016-03-13 06:18:22

0

很简单...尝试转储功能:

mystring = %Q{"Double Quotes"} 
p mystring.dump 
=> "\"\\\"Double Quotes\\\"\"" 
p mystring 
=>"\"Double Quotes\"" 
相关问题