如何从字符串插值中转义#{

时间:2009-08-21 08:27:21

标签: ruby-on-rails ruby interpolation

我有一个heredoc,我使用#{}来插入其他一些字符串,但是有一个实例我还想在我的heredoc中写入实际文本#{some_ruby_stuff},而不进行插值。有没有办法逃脱#{。

我试过“\”,但没有运气。虽然它逃脱#{},但它也包含“\”:

>> <<-END
 #{RAILS_ENV} \#{RAILS_ENV} 
END
=> " development \#{RAILS_ENV}\n"

3 个答案:

答案 0 :(得分:19)

对于heredoc而不必手动转义所有可能的插值,您可以使用单引号样式的heredoc。它的工作原理如下:

item = <<-'END'
  #{code} stuff
  whatever i want to say #{here}
END

答案 1 :(得分:18)

我认为反斜杠哈希只是Ruby在一些irb-only方式中有用。

>> a,b = 1,2        #=> [1, 2]
>> s = "#{a} \#{b}" #=> "1 \#{b}"
>> puts s           #=> 1 #{b}
>> s.size           #=> 6

所以我认为你已经有了正确的答案。

答案 2 :(得分:4)

您可以改用'引号。其中包含的任何内容都不会被插值。

您使用转义#的解决方案也适用于我。确实Ruby解释器显示

=> "\#{anything}"

> puts "\#{anything}"
#{anything}
=> nil

您的字符串包含您想要的内容,只有p方法显示转义字符。实际上,p方法向您展示了如何编写字符串以获得由其参数表示的完全对象。