是否有必要转义Ruby字符串插值中使用的双引号?

时间:2014-01-08 22:43:39

标签: ruby string string-interpolation

给出以下Ruby代码:

my_array = %w(one two three)
logger.info "Backtrace:\n#{my_array.join("\n")}"

预期产出:

Backtrace:
one
two
three

是否有必要逃避双引号"\n"或导致相反的效果?

2 个答案:

答案 0 :(得分:2)

不,#{...}里面的双引号字符串(或其他引用的字符串,其行为类似于双引号字符串)只是Ruby,所以#{...}中的双引号字符串只是普通的旧双引用字符串。特别是:

s = "#{"\n"}"

会将一个换行符放入s

答案 1 :(得分:1)

我建议使用irb尝试这样的短代码段落,它可以即时读取和解释Ruby代码。

关于你的问题:

my_array = %w(one two three)
logger.info "Backtrace:\n#{my_array.join("\n")}"

是正确的语法,并且:

my_array = %w(one two three)
logger.info "Backtrace:\n#{my_array.join(\"\n\")}"

不起作用。 <{1}}导致内部的所有内容被视为普通的Ruby表达式而无需特殊的转义。