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 > 
4

4 回答 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 的评论。

于 2012-04-10T04:57:07.697 回答
3

反斜杠字符是转义字符。您可能已经看到 "\n" 用于显示新行,这就是原因。"\123" 评估 83 的 ASCII 码,即 "S"。要打印反斜杠,请使用 2 个反斜杠。所以你可以使用str = "xyz\\123".

于 2012-04-10T04:57:42.080 回答
0

如何打印反斜杠?

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

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

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

表 22.2。 双引号字符串中的替换

Thomas, D. (2009) Ruby 编程,第 329 页

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

于 2014-07-20T02:30:23.347 回答
-1

很简单……试试转储功能:

mystring = %Q{"Double Quotes"}
p mystring.dump
=> "\"\\\"Double Quotes\\\"\""
p mystring
=>"\"Double Quotes\""
于 2016-11-08T18:48:38.883 回答