2014-05-22 4 views
43

क्यों रूबी में काम करता है।रुबी में स्पेस कॉन्सटेनेट द्वारा दो तारों को अलग क्यों किया जाता है? क्यों तार के बजाय एक सिंटैक्स त्रुटि दिया जा रहा concatenated रहे थे के रूप में</p> <pre><code>"foo" "bar" # => "foobar" </code></pre> <p>मैं अनिश्चित हूँ:

मुझे उत्सुकता है कि यह व्यवहार की अपेक्षा की जाती है या नहीं और यह कुछ है कि यह पार्सर wrangling के लिए ज़िम्मेदार है (ऑपरेटर के बिना दो तारों को एक स्ट्रिंग माना जाता है) या भाषा परिभाषा स्वयं ही इस व्यवहार को निर्दिष्ट कर रही है (निहित कॉन्सट)।

+1

समान बात पाइथन – Gogo

+1

में दिलचस्प होती है। जैसा कि जेकिल्लियन ने कहा था, यह दोनों भाषाओं की सी पृष्ठभूमि से संबंधित होना चाहिए। दस्तावेज़ों के संदर्भ के लिए – Lukas

उत्तर

33

क्रियान्वयन विवरण रूबी स्रोत कोड में parse.y फ़ाइल में पाया जा सकता। विशेष रूप से, here

एक रूबी string या तो है एक tCHAR (?q जैसे), एक string1 (उदाहरण के लिए "क्ष", 'क्यू', या% q {q}), या string1 के संयोजन का एक पुनरावर्ती परिभाषा और string ही है, जो स्ट्रिंग एक्सप्रेशन जैसे "foo" "bar", 'foo' "bar" या ?f "oo" 'bar' को संगत होने के परिणामस्वरूप।

+1

उस खोज के लिए Kudos। ऐसा लगता है कि तब एक पार्सर से संबंधित "फीचर" लगता है। लिंक के एक सेट के बजाय यहां औचित्य के लिए इसे स्वीकार करना। – Lukas

+2

"ए" 'बी'% क्यू {सी} # => नाम त्रुटि: अनियमित स्थिर q यह तब त्रुटि क्यों उत्पन्न करता है? –

+1

@IngridMorstrad क्योंकि% को एक मॉड्यूलस ऑपरेटर माना जाता है, स्ट्रिंग अक्षर का हिस्सा नहीं है। एक द्विआधारी ऑपरेटर होने के नाते, आपके द्वारा उल्लिखित अभिव्यक्ति को 'ab'% (q {c}) 'के रूप में पार्स किया गया है, ब्लॉक '{c}' 'q' को पारित किया गया है जो मौजूद नहीं है (संभवतः), इसलिए त्रुटि । –

48

सी और सी ++ में, string literals एक दूसरे के बगल में are concatenated। चूंकि इन भाषाओं ने रूबी को प्रभावित किया, मुझे लगता है कि यह वहां से विरासत में है।

और यह रूबी में अब प्रलेखित है: देखने this answer और this page in the Ruby repo जिसमें कहा गया है:

Adjacent string literals are automatically concatenated by the interpreter:

"con" "cat" "en" "at" "ion" #=> "concatenation" 
"This string contains "\ 
"no newlines."    #=> "This string contains no newlines." 

Any combination of adjacent single-quote, double-quote, percent strings will be concatenated as long as a percent-string is not last.

%q{a} 'b' "c" #=> "abc" 
"a" 'b' %q{c} #=> NameError: uninitialized constant q 
+1

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

+1

अच्छी कॉल, दस्तावेज़ – JKillian

+2

से अनुच्छेद जोड़ा गया यह सुविधा कई भाषाओं में मौजूद है (संभवतः सभी इसे सी से उधार लेते हैं) और कई लाइनों पर लंबे तारों को लपेटते समय उपयोगी होती है। यह स्ट्रिंग्स (+, और या जो कुछ भी भाषा का उपयोग करता है) को बस संयोजित करने से भी अलग है क्योंकि यह "संकलन" समय पर होता है और इसलिए यह अभी भी एक स्ट्रिंग शाब्दिक है, और रन-टाइम पर अभिव्यक्ति का मूल्यांकन नहीं किया जाता है। – Tom

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