假设s
是一个字符串,其中包含一些插值#{...}
,例如:
s = " Hello #{Foo.bar(baz) + "}"} \n \" \\ World"
逃避s
的最简单方法是:
eval("\"#{s.some_escape_method}\"")
或等效
eval('"' + s.some_escape_method + '"')
会扩展s
中的插值,而不会影响s
的任何其他部分,例如字符"
,\n
等。
答案 0 :(得分:1)
使用%q{}
包围可能包含插值的代码字符串,该代码字符串将任何字符串化并关闭插值。
我们来试试吧。以下是字符串中的一些Ruby代码:
z = %q{s = "Hello #{"there, " + name + "!"}"}
# => "s = \"Hello \#{\"there, \" + name + \"!\"}\""
如果我们评估z
,我们将得到一个包含评估值s
的插值字符串。由于此示例中的s
需要另一个名为name
的字符串才能正确插值,因此我们首先定义:
name = "Bob Smith"
eval(z)
# => "Hello there, Bob Smith!"