2010-01-16 24 views

उत्तर

25

रूबी में करने से यह अलग है, तार परिवर्तनशील हैं। यही है, एक स्ट्रिंग मान वास्तव में बदला जा सकता है, न केवल किसी अन्य वस्तु के साथ बदल दिया। x << y वास्तव में स्ट्रिंग वाई को x में जोड़ देगा, जबकि x + y एक नया स्ट्रिंग बनाएगा और उसे वापस कर देगा।

यह केवल गहरे लाल रंग का दुभाषिया में परीक्षण किया जा सकता है:

irb(main):001:0> x = "hello" 
=> "hello" 
irb(main):002:0> x << "there" 
=> "hellothere" 
irb(main):003:0> x 
=> "hellothere" 
irb(main):004:0> x + "there" 
=> "hellotherethere" 
irb(main):005:0> x 
=> "hellothere" 

विशेष रूप से, देखते हैं कि x + "there" "hellotherethere" लौट आए लेकिन x का मूल्य अपरिवर्तित था। उत्परिवर्तनीय तारों से सावधान रहें, वे आ सकते हैं और आपको काट सकते हैं। अधिकांश अन्य प्रबंधित भाषाओं में उत्परिवर्तनीय तार नहीं होते हैं।

ध्यान दें कि स्ट्रिंग पर कई विधियों में विनाशकारी और विनाशकारी संस्करण दोनों हैं: x.upcase एक्स की ऊपरी-केस संस्करण वाली एक नई स्ट्रिंग लौटाएगी, जबकि एक्स अकेले छोड़कर; x.upcase! अपरकेज्ड मान वापस करेगा - और एक्स द्वारा इंगित ऑब्जेक्ट को संशोधित करें।

+1

एक उत्कृष्ट स्पष्टीकरण। एक्स = "बहुत"; एक्स << "धन्यवाद!" –

+4

बीटीडब्ल्यू: यह रूबी में अधिकांश अन्य संग्रह-आइस ऑब्जेक्ट्स पर भी लागू होता है। 'ऐरे # <<' उत्परिवर्तन द्वारा जोड़ रहा है, 'ऐरे # +' एक नया ऐरे बनाकर जोड़ रहा है। 'सेट # << 'सेट में कोई तत्व जोड़ रहा है,' सेट # + 'सेट यूनियन है। और इसी तरह। –

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