"सर्वश्रेष्ठ" आपके उपयोग के मामले पर काफी हद तक निर्भर करता है लेकिन निम्नलिखित कोड पर विचार करें:
a = 'shirts'
b = a
params = {}
params[:id] = b
params[:id] << '/'
params[:id] #=> "shirts/"
हम उम्मीद थी के रूप में, <<
एक स्लेश लेकिन ... जोड़ा गया है
a #=> "shirts/"
# a has changed too!
तो , इन विधियों के साथ समझने के अपने स्तर के आधार पर, यह एक ऐसा व्यवहार है जिसे आप उम्मीद नहीं कर सकते हैं। तुलना करें:
params[:id] += '/'
params[:id] #=> "shirts/"
a #=> "shirts"
# a remains the same
असल में, कुछ विधियां नई वस्तुओं को बनाती हैं और अन्य मौजूदा लोगों को संशोधित करती हैं। हम object_id विधि के साथ इसका परीक्षण कर सकते हैं।
str1 = 'a'
str2 = str1
str1.object_id #=> 14310680
str2.object_id #=> 14310680
# Both str1 and str2 point to the same object
अब
str1 << 'b' #=> "ab"
str1.object_id #=> 14310680
str2 #=> "ab"
हम सफलतापूर्वक str1 एक नई वस्तु बनाने के बिना और str2 अभी भी एक ही वस्तु यह भी "अद्यतन" हो जाता है के लिए अंक के बाद से संशोधित किया है। अंत में, यदि हम +=
विधि का उपयोग करें:
str1 #=> "ab"
str1 += '' #=> "ab"
str1.object_id #=> 15078280
str2.object_id #=> 14310680
सूचना है कि हम str1 लिए कुछ भी नहीं जोड़ा है, लेकिन यह अभी भी एक नई वस्तु बनाता है।