2015-12-24 138 views
2

的IRB内部行为:IRB的转义双引号

"\'" 

回报"'",但是

"\"" 

回报"\"",即,它是一样的输入,而不会逃避双引号。如果按照预期使用它,那么为什么当它以这种方式尝试时不起作用?

+0

“没有逃脱双引号” - 你已经拥有它逃过一劫。 –

回答

5

irb正在完美工作。你不能指望它输出"""

根据定义:

转义字符是它调用在后面的字符的替代 解释在一个字符序列的字符。

在您的预期输出"""显然中间"有着不同的解读。因此它逃脱了。

为了让事情更清晰:

"\"" 
#=> "\"" 
puts "\"" 
# " 
+0

对于更多的困惑:'“\”“。​​检查' –

+0

@ D端,如果我没有错误,反斜杠本身的转义序列会增加额外的反斜杠吗? – Projjol

+0

@Projjol没错。语法重要的符号被前面的反斜杠转义 –

1

IRB默认使用Object#inspect语句执行后显示语句的结果。

String#inspect情况下,文件说,

返回海峡的打印版本,用引号包围, 特殊字符转义。

irb(main):001:0> "\"" 
=> "\"" 
irb(main):002:0> '"' 
=> "\"" 

当启动IRB,你可以通过--noinspect选项,在这种情况下,IRB将使用to_s打印结果。

例如,如果我们有一个类:

class Test 
    def to_s 
     "#{self.class} instance" 
    end 
end 

默认IRB:

irb(main):003:0> Test.new 
=> #<Test:0x00000002ad7fa8> 

随着irb --noinspect

irb(main):002:0> Test.new 
=> Test instance 
irb(main):003:0> "\"" 
=> " 
irb(main):004:0> '"' 
=> " 
irb(main):005:0>