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

时间:2016-12-01 11:34:13

标签: 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的字符串分成两行,并将第一部分放入单行 引号,因为没有任何内插。 Rubocop很高兴。

日志记录语句使用symbol的正确值记录消息:

11:06:57 web.1        | Some long error message without interpolation "VALOFSYMBOL": ERRORMSG

但是,当之后引发的异常,携带相同的消息时,是 最后打印(在resque failure log和airbrake中),不同的值(其中 变量有一段时间之前)打印symbol

Some long error message without interpolation "COMPLETEYDIFFERENT": ERRORMSG

不幸的是,我无法提供完整的工作示例,因为有一些 涉及的应用层,我只是希望可能有人 可以指出我正确的方向。怎么会发生这种情况?我的理解是 插值发生在字符串分配给msg的时候,但是 似乎并非如此。

将代码更改为单行字符串可修复问题,字符串为 按照预期在两个地方印刷:

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

0 个答案:

没有答案
相关问题