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




string quotes (4)

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

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

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

"\ text"
'\ text' 

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

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

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

"\\ text"
'\\ text' 

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

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


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

संदर्भ से:

puts "Betty's pie shop"

puts 'Betty\'s pie shop'

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


यह एक पूर्ण उत्तर नहीं है (क्योंकि सरल प्रश्न का उत्तर पहले ही दिया गया है), बल्कि यह पूरक जानकारी है।

रुबी स्ट्रिंग उद्धरण की कौन सी शैली आप का पक्ष लेती है?

यदि आपको उनसे बचना है तो डबल कोट्स का उपयोग न करें। और "सिंगल बनाम डबल कोट्स" जाल में मत आना। रूबी को स्ट्रिंग अक्षर के लिए मनमाने ढंग से delimiters के लिए उत्कृष्ट समर्थन है:

http://rors.org/2008/10/26/dont-escape-in-strings

मैंने वह सलाह ली और कभी पीछे नहीं देखा!


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

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

"#{variable}"

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

'The value of X is: '+X

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





backslash