Hiçbir şey değiştiriyorsa senin dondurulmuş Sen
a = a + "this string"
Eklemek olarak içten Ruby aynıdır
a += "this string"
ile yeni String
için a
atanması yeniden edilir String
Ruby'de iki String nesnesi, sonucu içeren yeni bir String yaratacaktır (bu,için normal davranıştıroperatör bunu destekleyen çoğu nesnede). Bu orijinal "Test" ve "bu string" değerlerini değiştirmez. Orijinal, donmuş String ("Test" içeren), toplanana kadar hafızada kalır. Tüm referansları kaybettiğiniz için toplanabilir. Böyle bir yerde nesneyi değiştirmeye teşebbüs ederse
:
a << "this string"
o zaman String
nesneyle, Temel olarak, a
şaşırtmamışımdır RuntimeError: can't modify frozen String
bir hata mesajı, yerel değişken görmelisiniz işaret ettiği Yerel değişkenler, Ruby tarafından depolanan nesnelerden bağımsız olarak herhangi bir zamanda yeniden atanabilir. Durumunuzda ne olduğunu doğrulamak için a.object_id
numaralı telefonunuzu a +=
... satırından önce ve sonra kontrol edebilirsiniz.
Olası kopyalar (http://stackoverflow.com/questions/17067171/freezing-variables-in-ruby- çalışmıyor) – Manishh
Değişkenler değişebilir; Bu yüzden değişken olarak adlandırılıyorlar. –
Bunun bir yinelenen olduğunu görüyorum, ama bu iyi bir cevabı olan temiz bir sorudur, ki bu da beni bunun üzerinde çift çekiç kullanmaya isteksiz kılıyor. Daha büyük olmasına rağmen [aday gösterilmiş] (http://stackoverflow.com/questions/17067171/freezing-variables-in-ruby-doesnt-work) bu sorunun bir kopyası olarak işaretlemeyi tercih ederim. temiz değil. –