【发布时间】:2015-12-24 12:26:01
【问题描述】:
irb 内部:
"\'"
返回"'",然而
"\""
返回"\"",即与输入相同,不转义双引号。与 puts 一起使用按预期工作,但为什么以这种方式尝试时它不起作用?
【问题讨论】:
-
"没有转义双引号" - 你已经把它转义了。
irb 内部:
"\'"
返回"'",然而
"\""
返回"\"",即与输入相同,不转义双引号。与 puts 一起使用按预期工作,但为什么以这种方式尝试时它不起作用?
【问题讨论】:
irb 运行良好。你不能指望它输出"""。
根据定义:
转义字符是调用替代字符的字符 对字符序列中后续字符的解释。
在您的预期输出中""" 显然中间" 有不同的解释。因此它被逃脱了。
为了让事情更清楚:
"\""
#=> "\""
puts "\""
# "
【讨论】:
"\"".inspect
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>
【讨论】: