多行Ruby字符串中的字符串插值产生的结果与同一行中的相同字符串不同

多行Ruby字符串中的字符串插值产生的结果与同一行中的相同字符串不同,ruby,string-interpolation,Ruby,String Interpolation,我刚刚发现ruby的字符串插值有一个奇怪的行为 是否使用多行字符串的区别: rescue StandardError => e msg = 'Some long error message without interpolation '\ "#{symbol.inspect}: #{e.message}." Rails.logger.error msg raise e.exception(msg) end 我将msg的字符串分成两行,并将第一部分放在一行中 引

我刚刚发现ruby的字符串插值有一个奇怪的行为 是否使用多行字符串的区别:

rescue StandardError => e
  msg = 'Some long error message without interpolation '\
        "#{symbol.inspect}: #{e.message}."
  Rails.logger.error msg
  raise e.exception(msg)
end
我将
msg
的字符串分成两行,并将第一部分放在一行中 引用,因为没有可插入的内容。鲁博科普当时很高兴

logging语句使用
符号的正确值记录消息:

11:06:57 web.1        | Some long error message without interpolation "VALOFSYMBOL": ERRORMSG
但是,当之后引发的带有相同消息的异常 最后打印(在resque故障日志和airbrake中)一个不同的值(其中 变量之前有一段时间)用于打印
符号

Some long error message without interpolation "COMPLETEYDIFFERENT": ERRORMSG
不幸的是,我不能给出一个完整的工作示例,因为有一些 涉及到应用层,我只是希望有人 你能给我指出正确的方向。这怎么会发生?我的理解是 插值发生在字符串被分配给
msg
时,但是 情况似乎并非如此

将代码更改为一行字符串可以解决此问题,并且字符串是 按预期在两处打印:

  msg = "Some long error message without interpolation #{symbol.inspect}: #{e.message}."

我不知道为什么不进行测试,但我用%Q和定界符对多行字符串进行了交错细分,只是问题是字符串中有左缩进。我想要适当的缩进,没有额外的空格,但不能使用Ruby 2.3的新的heredoc语法,因为Ruby的解析器为两个字符串变量生成相同的结果。但是,如果没有一个可复制的例子,我将投票结束这个问题。是的,结束它是有意义的。也许是巧合造成的。我只是想确保我没有遗漏关于多行字符串语法的内容。