मौजूदा स्ट्रिंग के लिए आवेदन करना


104

मौजूदा स्ट्रिंग को जोड़ने के लिए मैं यही कर रहा हूं।

s = 'hello'
s.gsub!(/$/, ' world');

क्या मौजूदा स्ट्रिंग को जोड़ने का एक बेहतर तरीका है।

इससे पहले कि कोई व्यक्ति उत्तर देने के बारे में सुझाव दे, लमेम दिखाता है कि यह काम नहीं करता है

s = 'hello'
s.object_id
s = s + ' world'
s.object_id 

उपरोक्त मामले में object_id दो मामलों के लिए अलग होगा।

जवाबों:


166

आप <<एक स्ट्रिंग में जगह में संलग्न करने के लिए उपयोग कर सकते हैं ।

s = "foo"
old_id = s.object_id
s << "bar"
s                      #=> "foobar"
s.object_id == old_id  #=> true

1
आप कैसे करते हैं <<! "बार", वस्तु की स्थिति को संशोधित करने के लिए के रूप में? कॉनकट! ("बार") काम नहीं करता ...
xxjjnn

@RainbowPony जैसा कि मेरा जवाब दिखाता है, <<पहले से ही वस्तु की स्थिति को संशोधित करता है। तो करता है concat
sepp2k

हमेशा नहीं: irb (मुख्य): 038: 0> widget.notes.where (: author_id => a) .first.message.concat ("आलू") => "Y हेलो थार! = DPPato" irb (मुख्य): 039: 0> widget.notes.where (: author_id => a) .first.message => "Y halo thar! = D" # विजेट विजेट का एक उदाहरण है। इसमें नोट हो सकते हैं। संदेश Attr_accessible है।
xxjjnn

1
@RainbowPony हां, हमेशा। आपके मामले में आपको अपरिवर्तित स्ट्रिंग वापस मिल जाती है क्योंकि widget.notes.where(:author_id => a).firstसंभवतः प्रत्येक बार एक नई वस्तु लौटाती है, जिसका अपना स्वतंत्र स्ट्रिंग होगा।
sepp2k

आह। मैंने अभी एक नया सवाल पूछा है stackoverflow.com/questions/13989619/… मदद के लिए धन्यवाद!
xxjjnn

56

आप निम्नलिखित का भी उपयोग कर सकते हैं:

s.concat("world")

4
<<यह श्रृंखला के रूप में अच्छी तरह से, के रूप में यह स्ट्रिंग लौटाया जाना चाहिए।
स्कॉटीसियस

वास्तव में - और << भी लिखने के लिए छोटा है और C ++ cout संस्करण के समान दिखता है। << सौंदर्य है!
शेवी

1
नोट: यह मूल स्ट्रिंग को संशोधित करता है। सावधानी से उपयोग करें।
डेमियन रोच

3

क्या मैं पूछ सकता हूं कि यह महत्वपूर्ण क्यों है?

मुझे पता है कि यह आपके सवाल का सीधा जवाब नहीं है, लेकिन यह तथ्य कि आप एक स्ट्रिंग की ऑब्जेक्ट आईडी को संरक्षित करने की कोशिश कर रहे हैं, यह संकेत दे सकता है कि आपको फिर से देखना चाहिए कि आप क्या करने की कोशिश कर रहे हैं।

उदाहरण के लिए, आप पा सकते हैं कि किसी स्ट्रिंग के ऑब्जेक्ट आईडी पर निर्भर होने से उन बग्स को बढ़ावा मिलेगा जो नीचे ट्रैक करने में काफी कठिन हैं।


4
शायद संदर्भ द्वारा मापदंडों को संशोधित करने के लिए? (जो एक पूर्ण ओप भाषा में संभावित खराब डिजाइन है)
हानीखान77

4
या सिर्फ बहुत सी नई वस्तुओं को बनाने से बचने के लिए? यह पूरी तरह से उचित है।
जेम्स ए। रोसेन

1
निश्चित रूप से यदि आप एक स्ट्रिंग को जगह में संशोधित करते हैं और एक नई वस्तु बनाई जाती है, तो पुरानी वस्तु एकत्र हो जाती है? क्या हमें वास्तव में हमारे द्वारा बनाई गई स्ट्रिंग वस्तुओं की संख्या के बारे में चिंता करनी चाहिए?
शैडोफायरबर्ड 21

@ शडोफायरबर्ड शायद वह एक ऐसा तरीका लिख ​​रहा है जिसे एक सेकंड में 1000 बार कॉल किया जाता है और स्ट्रिंग्स के एक गुच्छा के साथ अपने कचरा कलेक्टर को नीचे नहीं बांधना है।
माइकल डोरस्ट जूल


1

यहाँ एक और तरीका है:

fist_segment = "hello,"
second_segment = "world."
complete_string = "#{first_segment} #{second_segment}"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.