ruby एकल उद्धृत तार बनाम डबल उद्धृत तारों में बैकस्लाश




string quotes (4)

यदि मैं डबल और सिंगल उद्धृत तारों की शुरुआत में बैकस्लैश + स्पेस जोड़ता हूं, तो मुझे अलग-अलग परिणाम मिलते हैं:

"\ text"
'\ text' 

डबल उद्धृत स्ट्रिंग के आउटपुट में मुझे केवल एक जगह दिखाई देती है।
एकल उद्धृत स्ट्रिंग के आउटपुट में मैं बैकस्लैश + स्पेस देखता हूं।

वहां क्या हो रहा है? क्या ऐसा इसलिए है क्योंकि '\ ' को डबल कोट स्ट्रिंग में विशेष वर्ण के रूप में व्याख्या किया जाता है लेकिन एकल उद्धृत स्ट्रिंग में वर्णों को संरक्षित किया जाता है?

यदि मैं इस पर तार बदलता हूं, तो मुझे एक ही आउटपुट दिखाई देता है, अर्थात् एक स्लैश के बाद एक स्थान और फिर पाठ:

"\\ text"
'\\ text' 

दोनों मामलों में बैकस्लैश बच निकला है। मैं उलझन में हूं कि वे इस स्थिति में उसी तरह क्यों काम करते हैं।

क्या कोई ऐसा नियम है जो रूबी में सिंगल उद्धृत तारों और डबल उद्धृत तारों को बैकस्लैश को संभालने के बीच मौलिक अंतर को समझाने में मदद करेगा?


ऐसा इसलिए है क्योंकि '\' को डबल कोट स्ट्रिंग में विशेष वर्ण के रूप में व्याख्या किया जाता है लेकिन एकल उद्धृत स्ट्रिंग में वर्णों को संरक्षित किया जाता है?

हाँ। एकल उद्धृत तारों को शाब्दिक माना जाता है; डबल-उद्धृत तारों को अलग किया जाता है। यह अन्य रूबी जैसी भाषाओं में समान है, और 1.9 में नहीं बदला है।


डबल-उद्धृत स्ट्रिंग्स नीचे दिखाए गए अनुसार, एस्केप दृश्यों की पूरी श्रृंखला का समर्थन करते हैं:

  • \a बेल / चेतावनी (0x07)
  • \b बैकस्पेस (0x08)
  • \e एस्केप (0x1b)
  • \f फॉर्मफोर्ड (0x0c)
  • \n न्यूलाइन (0x0a)
  • \r रिटर्न (0x0d)
  • \s स्पेस (0x20)
  • \t टैब (0x0 9)
  • \v लंबवत टैब (0x0b)

एकल-उद्धृत तारों के लिए, लगातार दो बैकस्लाश को एक बैकस्लैश द्वारा प्रतिस्थापित किया जाता है, और एक सिंगल कोट के बाद बैकस्लैश एक एकल उद्धरण बन जाता है:

'escape using "\\"' -> escape using "\"
'That\'s right'     -> That's right

अंतरों के एक बहुत ही संक्षिप्त लेकिन व्यापक अवलोकन के लिए मैं आपको " रूबी प्रोग्रामिंग / स्ट्रिंग्स " का संदर्भ दूंगा।

संदर्भ से:

puts "Betty's pie shop"

puts 'Betty\'s pie shop'

चूंकि "बेट्टीज़" में एक एस्ट्रोफ़े होता है, जो कि एकल पंक्ति के समान चरित्र है, दूसरी पंक्ति में हमें एस्ट्रोफ़े से बचने के लिए बैकस्लैश का उपयोग करने की आवश्यकता है ताकि रूबी समझ सके कि एस्ट्रोफ़े स्ट्रिंग में है, स्ट्रिंग शाब्दिक। एकल उद्धरण के बाद बैकस्लैश को एस्केप अनुक्रम कहा जाता है।


रूबी केवल डबल उद्धृत तारों में भागने के दृश्यों का व्याख्या करता है। एक उद्धृत स्ट्रिंग में, केवल \\ (बैकस्लैश बैकस्लैश) और \' (बैकस्लैश कोट) विशेष वर्णों के रूप में लिया जाता है। आपको केवल डबल उद्धृत तारों का उपयोग करना चाहिए जब आपको अधिक व्याख्या की आवश्यकता हो। अन्यथा, एकल उद्धरण एक प्रदर्शन बढ़ावा प्रदान करते हैं।

जब आपने एक चर के नाम सहित उल्लेख किया है, रूबी कभी ऐसा नहीं करता है। बस परिवर्तनीय नाम स्ट्रिंग अक्षर के अधिक के रूप में माना जाता है। एक चर (या किसी अभिव्यक्ति) के मान को शामिल करने के लिए अभिव्यक्ति को इस तरह रखा गया है:

"#{variable}"

ध्यान दें कि यह केवल डबल उद्धृत तारों में काम करता है। एक उद्धृत एक को एक चर जोड़ने के लिए, आपको यह करने की ज़रूरत है:

'The value of X is: '+X

अगर आपको गंभीर स्वरूपण की आवश्यकता है, तो रूबी के स्प्रिंटफ और प्रिंटफ के संस्करण में देखें। वे सी कार्यों के चारों ओर बहुत अधिक रैपर हैं, और काफी शक्तिशाली हैं, लेकिन उपयोग करने के लिए थोड़ा बोझिल हैं।







backslash