多行Ruby字符串中的字符串插值产生的结果与同一行中的相同字符串不同
我刚刚发现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的字符串分成两行,并将第一部分放在一行中 引
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的解析器为两个字符串变量生成相同的结果。但是,如果没有一个可复制的例子,我将投票结束这个问题。是的,结束它是有意义的。也许是巧合造成的。我只是想确保我没有遗漏关于多行字符串语法的内容。