2012-06-03 16 views
6

मुझे रुबी में एक क्विन (प्रोग्राम जो स्वयं प्रिंट करता है) के उदाहरण के रूप में विकिपीडिया पर यह कोड ब्लॉक मिला है।रूबी क्विन को समझना

puts <<2*2,2 
puts <<2*2,2 
2 

हालांकि, मुझे यह नहीं पता कि यह कैसे काम करता है।

syntax error, unexpected $end, expecting tSTRING_CONTENT or tSTRING_DBEG or tSTRING_DVAR or tSTRING_END

क्या उन पंक्तियों में क्या होता है: विशेष रूप से, मैं क्या नहीं मिलता है कि जब मैं अंतिम पंक्ति को हटा दें, मैं इस त्रुटि मिलती है?

उत्तर

6

<<something वाक्य रचना एक यहाँ-दस्तावेज़, यूनिक्स से उधार शुरू होता है अनुमान लगा सकते हैं तार परिभाषित कर सकते हैं पर्ल के माध्यम से गोले - यह मूल रूप से एक मल्टीलाइन स्ट्रिंग अक्षर है जो << के बाद लाइन पर शुरू होता है और जब 0 लाइनके साथ शुरू होता है तो समाप्त होता है।

तो संरचना की दृष्टि से, कार्यक्रम सिर्फ इस कर रही है:

puts str*2,2 

... कि है, प्रिंट str की दो प्रतियां संख्या 2.

लेकिन चर str के बजाय द्वारा पीछा किया, यह

puts <<2*2,2 
puts <<2*2,2 
2 

तो यह स्ट्रिंग की दो प्रतियां बाहर प्रिंट: यहां-दस्तावेज़ जिसका न खत्म होने वाली प्रहरी के माध्यम से एक शाब्दिक स्ट्रिंग सहित भी अंकों 2 है puts <<2*2,2, उसके बाद 2. (और चूंकि उन्हें मुद्रित करने के लिए प्रयुक्त विधि puts है, उनमें से प्रत्येक चीज स्वचालित रूप से एक नई लाइन जोड़ती है।)

+0

लेकिन यदि स्ट्रिंग का अंतिम मार्कर "<" के बाद "कुछ" है <', यह तब' 2 * 2,2' अनुक्रम नहीं होना चाहिए, और उसी अनुक्रम को अंतिम पंक्ति में समाप्त करने के लिए उपयोग किया जाना चाहिए? – SasQ

+0

'<<' की प्राथमिकता '*' से अधिक कठिन है, इसलिए '<< 2 * 2' "स्ट्रिंग निम्नलिखित 2-समाप्त दस्तावेज़ द्वारा दर्शायी गई स्ट्रिंग है, जो निम्नलिखित द्वारा दर्शाए गए स्ट्रिंग के बजाय 2 से गुणा" यहां 2 * 2-समाप्त दस्तावेज़। " –

1

गहरे लाल रंग का है, तो आप के साथ

str = <<DELIMITER 
    long string 
    on several 
    lines 
DELIMITER 

मुझे लगता है कि यहां से, आप आराम :)

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