我有一个heredoc,我用#{}
它来插入一些其他字符串,但是有一个实例我也想#{some_ruby_stuff}
在我的heredoc 中写入实际文本,而不是插入它。有没有办法逃脱#{。
我试过“\”,但没有运气。虽然它转义了#{}
,但它还包括“\”:
>> <<-END
#{RAILS_ENV} \#{RAILS_ENV}
END
=> " development \#{RAILS_ENV}\n"
我有一个heredoc,我用#{}
它来插入一些其他字符串,但是有一个实例我也想#{some_ruby_stuff}
在我的heredoc 中写入实际文本,而不是插入它。有没有办法逃脱#{。
我试过“\”,但没有运气。虽然它转义了#{}
,但它还包括“\”:
>> <<-END
#{RAILS_ENV} \#{RAILS_ENV}
END
=> " development \#{RAILS_ENV}\n"
对于heredoc,无需手动转义所有可能的插值,您可以使用单引号样式-heredoc。它是这样工作的:
item = <<-'END'
#{code} stuff
whatever i want to say #{here}
END
我认为反斜杠哈希只是 Ruby 以某种 irb-only 方式提供帮助。
>> a,b = 1,2 #=> [1, 2]
>> s = "#{a} \#{b}" #=> "1 \#{b}"
>> puts s #=> 1 #{b}
>> s.size #=> 6
所以我想你已经有了正确的答案。
您可以改用'
引号。包含在其中的任何内容都不会被插值。
您的转义解决方案#
也适用于我。确实 Ruby 解释器显示
=> "\#{anything}"
但
> puts "\#{anything}"
#{anything}
=> nil
您的字符串完全包含您想要的内容,唯一p
的方法是使用转义字符显示它。实际上,p
方法向您展示了应如何编写字符串以获取由其参数表示的确切对象。