反斜杠打破了ruby中的字符串插值

时间:2013-07-15 09:26:09

标签: ruby string escaping string-interpolation

我想最后得到字符串"/a_setting/c\blah = something",其中属性被评估为其值:blah。但是,我看到以下行为,其中前面的反斜杠似乎停止了对变量的评估:

attribute = "blah"
"/a_setting/c\#{attribute} = something"
=> "/a_setting/c\#{attribute} = something"
"/a_setting/c\ #{attribute} = something"
=> "/a_setting/c blah = something"

2 个答案:

答案 0 :(得分:2)

获取所需的字符串:

"/a_setting/c\\#{attribute} = something"

你需要用反斜杠来逃避反斜杠。

  • 执行"\#"时,"#"将被转义,并且不会被解释为插值元素,而是被逐字"#",在检查中显示为"\#"{...}前面,以避免插值歧义。
  • 当您执行"\ "时," "被(冗余地)转义,并被解释为逐字" "

答案 1 :(得分:1)

我不明白你指的是什么。

但是如果你想在字符串中对你的属性进行评估,可能这就是你想要的

"/a_setting/c\\#{attribute} = something"

来自

 "/a_setting/c\#{attribute} = something"

您通过添加转义字符#{}

\转移评估

因此,解释器将评估#{}而不是表达式。

当您在另一个\之前添加另一个\时,下一个\将被转义并评估为普通字符。

"\#{attribute}" #:=> "\{attribute}
 "\\#{attribute}" #;=> "\blah"