ruby - Getting can't modify frozen string when using string.insert -


यह एक त्वरित सवाल है मेरे पास निम्न रूबी कोड है, जो ठीक काम करता है।

  def add_zeros संख्या, शून्य संख्या = number.to_s zeros_to_add = zeros - number.length zeros_to_add.times do संख्या = "0 # {number} "एंड नंबर एंड"  

लेकिन अगर मैं

  नंबर = "0 # {number}"  

को बदलता हूं

  number.insert (0, "0")  

तब मैं प्रकार एरर मिलता है: जमी स्ट्रिंग को संशोधित नहीं कर सकता है, क्या किसी को पता है कि यह क्यों है?

"post-text" itemprop = "text">

यदि उत्तल तर्क संख्या पहले से ही शुरू करने के लिए एक जमी स्ट्रिंग है, तब संख्या = नंबर.ट_एस कोई चीज़ नहीं बदलेगा और आप उसे इसे संशोधित नहीं कर पाएंगे ( number.insert के साथ):

< पूर्व> add_zeros ("24" .freeze, 10) # = & gt; TypeError: जमे हुए स्ट्रिंग को संशोधित नहीं किया जा सकता

इससे कोई नया स्ट्रिंग बनाना ( "0 # {number}" ) एक समस्या नहीं है, बिल्कुल। < / P>

आपकी स्ट्रिंग जमी जाने का कारण सूक्ष्म है। जब आप एक हैश कुंजी के रूप में एक स्ट्रिंग का उपयोग करते हैं, रूबी इसे की एक प्रति बनायेगी और इसे फ्रीज कर देगा:

  s = "hello" h = s} = s: world key = h .keys.first key.equal? ​​(S) # = & gt; गलत (रूबी ने एक प्रतिलिपि बनाई है) कुंजी। फ्रोजन? # = & Gt;  

वैसे भी, सामान्य नियम के रूप में, एक विधि को अपने तर्क को संशोधित नहीं करना चाहिए।

इस मामले में, आप शायद इसका उपयोग करना चाहते हैं ज़ोरदार :

  24.to_s.rjust (10, "0") # = & gt; "0000000024"  

Comments

Popular posts from this blog

windows - Heroku throws SQLITE3 Read only exception -

lex - Building a lexical Analyzer in Java -

python - rename keys in a dictionary -