在irb内:
"\'"
返回"'"
,但是
"\""
返回"\""
,即它与输入相同,而不转义双引号。使用它与put按预期工作,但为什么它以这种方式尝试时不起作用?
答案 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>