क्यों रूबी में स्ट्रिंग इंटरपोलेशन काम नहीं करता है जब कोई घुंघराले ब्रेसिज़ नहीं होते हैं?


90

रूबी में स्ट्रिंग प्रक्षेप का उपयोग करने का उचित तरीका इस प्रकार है:

name = "Ned Stark"
puts "Hello there, #{name}" #=> "Hello there, Ned Stark"

यही तरीका है कि मैं हमेशा इसका इस्तेमाल करने का इरादा रखता हूं।

हालांकि, मैंने रूबी के स्ट्रिंग इंटरपोलेशन में कुछ अजीब देखा है । मैंने देखा है कि रूबी में स्ट्रिंग इंटरपोलेशन चर चर के संबंध में घुंघराले ब्रेसिज़ के बिना काम करता है। उदाहरण के लिए:

@name = "Ned Stark"
puts "Hello there, #@name" #=> "Hello there, Ned Stark"

और यह कि गैर-इंस्टेंस चर के रूप में एक ही चीज़ की कोशिश करना काम नहीं करता है।

name = "Ned Stark"
puts "Hello, there, #name" #=> "Hello there, #name"

मैंने 1.9.2 और 1.8.7 दोनों में सफलता के साथ यह कोशिश की है।

यह काम क्यों करता है? यहाँ दुभाषिया क्या कर रहा है?

जवाबों:


103

फलागन और मात्सुमोतो द्वारा द रूबी प्रोग्रामिंग लैंग्वेज के अनुसार :

जब स्ट्रिंग शाब्दिक रूप से प्रक्षेपित होने वाली अभिव्यक्ति बस एक वैश्विक, उदाहरण या वर्ग चर का संदर्भ है, तो घुंघराले ब्रेसिज़ को छोड़ा जा सकता है।

तो निम्नलिखित सभी काम करना चाहिए:

@var = "Hi"
puts "#@var there!"  #=> "Hi there!"

@@var = "Hi"
puts "#@@var there!" #=> "Hi there!"

$var = "Hi"
puts "#$var there!"  #=> "Hi there!"

4
अच्छा सवाल है, बी.टी.वी. जिस भाषा के बारे में मैं भूल गया था, उसके छोटे कोनों को खोजकर वापस जाना अच्छा लगता है।
tsherif

2
हालांकि आपके उत्तर में एक कारण नहीं है या क्या चल रहा है, मुझे पता चल रहा है कि इस कारण को नीचे करना मुश्किल है। यहां तक ​​कि पुराने संदेश बोर्डों Matz पर टिप्पणी की अक्सर मदद नहीं कर रहे हैं। हालाँकि, आपका उत्तर दिखाता है कि यह एक विशेषता है, जो कि केवल एक फ्लूक के विपरीत है।
चार्ल्स कैलडवेल

1
मुझे यकीन नहीं है कि आप एक कारण के रूप में क्या उम्मीद कर रहे हैं। क्या आपका मतलब डिजाइन निर्णय के रूप में है? मेरा अनुमान है कि यह पर्ल-जैसे सिंटैक्स में एक प्रयास था , क्योंकि मेरा मानना ​​है कि रूबी को मूल रूप से अपने आप में आने से पहले पर्ल ++ के एक प्रकार के रूप में कल्पना की गई थी।
tsherif

2
मैं पूरी तरह से नॉब हूं और मेरे आईडीई को मेरे साथ ऐसा करने की शिकायत थी। लेकिन मुझे खुद पर यकीन है कि यह अच्छी शैली है। यह निरर्थक असंगत है और इसका एक नकारात्मक पहलू है - जैसे कि अगर मेरे पास 100 के मान के साथ एक चर चर @distance है और एक स्ट्रिंग बनाना चाहते हैं जो "# @ दूरी" जैसी अभिव्यक्ति का उपयोग करते हुए "100 मीटर" जैसा कुछ कहे तो मुझे बस एक रिक्त स्ट्रिंग मिलेगी क्योंकि कोई उदाहरण चर 'दूरी' नहीं है। तो यह बिल्कुल खराब शैली की तरह लगता है।
भयानक

3
@ भयावह ओह यह निश्चित रूप से खराब शैली है। इसलिए मैंने इसे करने के सही तरीके को इंगित करके अपना प्रश्न शुरू किया। हालाँकि, मुझे बस यह अजीब लगा कि यह भाषा की एक विशेषता थी और आश्चर्य था कि यह क्यों काम करती है। तो फिर, यह भी एक संयोजन के साथ एक वाक्य शुरू करने के लिए बुरा शैली है। लेकिन आप फिर भी लोगों को इधर-उधर इसका इस्तेमाल करते देखेंगे। =)
चार्ल्स कैलडवेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.