如何转义包含插值的Ruby字符串,以便我以后可以“评估”它?

时间:2014-04-23 19:07:50

标签: ruby string escaping

假设s是一个字符串,其中包含一些插值#{...},例如:

s = " Hello #{Foo.bar(baz) + "}"} \n \" \\ World"

逃避s的最简单方法是:

eval("\"#{s.some_escape_method}\"")

或等效

eval('"' + s.some_escape_method + '"')

会扩展s中的插值,而不会影响s的任何其他部分,例如字符"\n等。

1 个答案:

答案 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!"