irb 转义双引号的行为
irb's behavior for escaping double quotes
IRB 内部:
"\'"
returns "'"
,但是
"\""
returns "\""
,即和输入一样,没有转义双引号。将它与 puts 一起使用按预期工作,但为什么以这种方式尝试时它不起作用?
irb 运行良好。你不能指望它输出 """
.
根据定义:
an escape character is a character which invokes an alternative
interpretation on subsequent characters in a character sequence.
在你预期的输出中 """
显然中间 "
有不同的解释。因此它被逃脱了。
为了让事情更清楚:
"\""
#=> "\""
puts "\""
# "
IRB在语句执行后默认使用Object#inspect
来显示语句的结果。
在 String#inspect
的情况下,文档说
Returns a printable version of str, surrounded by quote marks, with
special characters escaped.
irb(main):001:0> "\""
=> "\""
irb(main):002:0> '"'
=> "\""
启动IRB时,你可以传递--noinspect
选项,在这种情况下,irb将使用to_s
打印结果。
例如,如果我们有一个 class:
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>
IRB 内部:
"\'"
returns "'"
,但是
"\""
returns "\""
,即和输入一样,没有转义双引号。将它与 puts 一起使用按预期工作,但为什么以这种方式尝试时它不起作用?
irb 运行良好。你不能指望它输出 """
.
根据定义:
an escape character is a character which invokes an alternative interpretation on subsequent characters in a character sequence.
在你预期的输出中 """
显然中间 "
有不同的解释。因此它被逃脱了。
为了让事情更清楚:
"\""
#=> "\""
puts "\""
# "
IRB在语句执行后默认使用Object#inspect
来显示语句的结果。
在 String#inspect
的情况下,文档说
Returns a printable version of str, surrounded by quote marks, with special characters escaped.
irb(main):001:0> "\""
=> "\""
irb(main):002:0> '"'
=> "\""
启动IRB时,你可以传递--noinspect
选项,在这种情况下,irb将使用to_s
打印结果。
例如,如果我们有一个 class:
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>