【问题标题】:irb's behavior for escaping double quotesirb 转义双引号的行为
【发布时间】:2015-12-24 12:26:01
【问题描述】:

irb 内部:

"\'" 

返回"'",然而

"\""

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

【问题讨论】:

  • "没有转义双引号" - 你已经把它转义了。

标签: ruby irb


【解决方案1】:

irb 运行良好。你不能指望它输出"""

根据定义:

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

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

为了让事情更清楚:

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

【讨论】:

  • 更多困惑:"\"".inspect
  • @D-side,如果我没记错的话,由于反斜杠本身的转义序列而添加了额外的反斜杠?
  • @Projjol 没错。每个语法重要的符号都用前面的反斜杠转义。
  • @Projjol 在这个问题中你还有什么期待得到回答的吗?
【解决方案2】:

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>

【讨论】:

    猜你喜欢
    • 2020-11-26
    • 1970-01-01
    • 2013-06-17
    • 2013-08-09
    • 1970-01-01
    • 1970-01-01
    • 2020-02-21
    • 1970-01-01
    • 2011-04-19
    相关资源
    最近更新 更多