2009-08-21 5 views
10

私は#{}を使用して他の文字列を補間しているヘレドックを持っていますが、実際のテキストを書いているインスタンスもあります。#{some_ruby_stuff}は、 。 #{。をエスケープする方法はありますか?私はどのようにエスケープしますか#

私は "\"を試しましたが、運はありませんでした。

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

答えて

17

バックスラッシュハッシュはRubyのほうが役に立つと思っています。

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

あなたはすでに正しい答えがあると思います。

+0

あなたは正しいです。 irbは "役立って"いた。 Thx – Nick

4

あなたが代わりに'引用符を使用することができます:それは#{}をエスケープしますが、それはまた、「\」を含みます。それらに囲まれているものは補間されません。

あなたの解決策は#で逃げることもできます。実際、Rubyインタプリタが

=> "\#{anything}" 

しかし

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

を示してあなたの文字列は、あなたが望んでいたまさに含み、唯一p方法は、エスケープ文字でそれを示しています。実際には、pメソッドは、そのパラメータで表される正確なオブジェクトを取得するために文字列を書き込む方法を示しています。

+0

おそらく私は十分にはっきりしていませんでした。これはおそらくヘレドックの中にあります。私はそれを反映するために例を更新しました。 – Nick

+1

も同様です。 '#{anything}} == '#{anything}' '補間なし、生成された文字列には実際にバックスラッシュは含まれません。 'irb'は' String#inspect'を使っているので、ただ表示します。 (未検査の)文字列を見るには 'puts << END'を試してください。 – rampion

18

潜在的なすべての補間を手でエスケープする必要がないheredocでは、一重引用符形式のheredocを使用できます。これは次のように機能します:

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

私の場合、これは本当に正しい答えです。 – Rob

関連する問題