2009-08-21 16 views
10

से बचने के लिए कैसे बचूं I have a heredoc है जहां मैं #{} का उपयोग कुछ अन्य स्ट्रिंग्स को इंटरपोल करने के लिए कर रहा हूं, लेकिन एक ऐसा उदाहरण है जहां मैं अपने हेडोकोक में वास्तविक टेक्स्ट #{some_ruby_stuff} लिखना चाहता हूं, बिना इसे इंटरपोलेट किया जा रहा है । # {से बचने का कोई तरीका है।मैं {{स्ट्रिंग इंटरपोलेशन

मैंने कोशिश की है "\", लेकिन कोई भाग्य नहीं है।

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

उत्तर

17

मुझे लगता है कि बैकस्लैश-हैश सिर्फ रूबी कुछ irb-only तरीके से सहायक है।

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

तो मुझे लगता है कि आपके पास पहले से ही सही उत्तर है।

+0

आप सही हैं। आईआरबी "सहायक" था। Thx – Nick

4

आप ' उद्धरण के बजाय का उपयोग कर सकते हैं: हालांकि यह #{} निकल जाता है, यह भी "\" भी शामिल है। उनमें से जुड़ी कुछ भी अलग नहीं हो रही है।

# से बचने के साथ आपका समाधान भी मेरे लिए काम करता है। दरअसल रूबी दुभाषिया से पता चलता

=> "\#{anything}" 

लेकिन

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

आपका स्ट्रिंग शामिल आप वास्तव में क्या चाहते थे, केवल p विधि भागने पात्रों के साथ यह पता चलता है। असल में, p विधि आपको दिखाती है कि सटीक वस्तु को इसके पैरामीटर द्वारा प्रतिनिधित्व करने के लिए स्ट्रिंग कैसे लिखी जानी चाहिए।

+0

शायद मैं पर्याप्त स्पष्ट नहीं था - यह एक हेडोकोक के भीतर है। मैंने इसे बेहतर ढंग से प्रतिबिंबित करने के लिए उदाहरण अपडेट किया है। – Nick

+1

वही अभी भी है। '" \ # {कुछ भी} "== '# {कुछ भी}' 'कोई इंटरपोलेशन नहीं, और जेनरेट की गई स्ट्रिंग में वास्तव में बैकस्लैश नहीं होता है। 'irb' सिर्फ 'स्ट्रिंग # निरीक्षण' का उपयोग कर एक प्रदर्शित करता है। (अप्रत्याशित) स्ट्रिंग देखने के लिए '<< END' डालता है। – rampion

18

हेरेडोक के लिए अपने सभी संभावित इंटरपोलेशंस से बचने के बिना, आप एकल-कोट-शैली-हेरेडोक का उपयोग कर सकते हैं। यह इस तरह काम करता है:

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

यह वास्तव में मेरे मामले के लिए सही जवाब है। – Rob

संबंधित मुद्दे