Rozważmy następujący kod:Czy ciągi znaków w Ruby są zmienne?
$ irb
> s = "asd"
> s.object_id # prints 2171223360
> s[0] = ?z # s is now "zsd"
> s.object_id # prints 2171223360 (same as before)
> s += "hello" # s is now "zsdhello"
> s.object_id # prints 2171224560 (now it's different)
Wygląda poszczególnych znaków można zmienić w/o stworzenie nowego łańcucha. Jednak dodanie do łańcucha najwyraźniej tworzy nowy ciąg.
Czy łańcuchy w Ruby są zmienne?
Tak, i odpowiada za pomocą banalnego wyszukiwania. http://stackoverflow.com/questions/2608493/why-did-matz-choose-to-make-strings-mutable-by-default-in-ruby –
@DaveNewton: Czy to nie wspaniale, jak łatwo jest znaleźć dups na SO, jak możesz prawie liczyć na temat SI wymyślić pierwszy w google? –
'+' jest konkatenacją i zwróci nowy ciąg. '<<' jest Dopisywanie i dopisze do danego obiektu typu string (nie tworzy nowego). – Chad