irb逃避双引号的行为

时间:2015-12-24 12:26:01

标签: ruby irb

在irb内:

"\'" 

返回"'",但是

"\""

返回"\"",即它与输入相同,而不转义双引号。使用它与put按预期工作,但为什么它以这种方式尝试时不起作用?

2 个答案:

答案 0 :(得分:5)

irb工作得很好。您不能指望它输出"""

根据定义:

  

转义字符是调用替代字符的字符   对字符序列中后续字符的解释。

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

让事情更清楚:

"\""
#=> "\""
puts "\""
# "

答案 1 :(得分:1)

默认情况下,

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

如果是String#inspect,文档说

  

返回str的可打印版本,用引号括起来   特殊字符逃脱。

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>