I'd like to end up with the string "/a_setting/c\blah = something" where attribute gets evaluated to its value: blah. However, I'm seeing the following behavior where the preceding backslash seems to stop the evaluation of the variable:

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

有帮助吗?

解决方案

To get the string you want:

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

You need to escape the backslash by backslash.

  • When you do "\#", the "#" is escaped, and is interpreted not as an interpolation element, but as the verbatim "#", which in inspection, appears as "\#" in front of {...} to avoid ambiguity with interpolation.
  • When you do "\ ", the " " is (redundantly) escaped, and is interpreted as the verbatim " ".

其他提示

I don't understand what you are pointing at.

But if you are trying to have your attributed evaluated in the string, probably this is what you want

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

coz by

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

you are escaping the evaluation by #{} by adding the escape character \

So interpreter will evaluate #{} rather as an expression.

When you add another \ before the other \, the next \ is escaped and evaluated as a normal character.

"\#{attribute}" #:=> "\{attribute}
 "\\#{attribute}" #;=> "\blah"
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top