No tak każda klasa inaczej może określać swe reguły, w takim razie wrócę do stringa. Czy += to tylko wypadek przy pracy twórców, czy wynika z niego coś praktycznego? Bo w chwili obecnej tą instrukcje uważam za niebezpieczną względem wydajności.
A znacie jakąś prostą sytuację w której to wspomniane kopiowanie musiało nastąpić?
[code=ruby]def fajna_funkcja parametr
parametr += ’ jest fajna’
…i coś tu sobie dalej robi z rozszerzonym parametrem
end
def wydajna_funkcja parametr
parametr << ’ jest niefajna’
…i coś tu sobie dalej robi z rozszerzonym parametrem
end
tekst = ‘funkcja’
fajna_funkcja tekst
puts tekst
wydajna_funkcja tekst
puts tekst[/code]
Nie.
Ojej. Jeśli lubisz przedwczesna optymalizację, to niestety wybrałeś zły język, bo Ruby jest w ogóle strasznie niebezpieczny względem wydajności.
Działanie funkdji operujących na kolekcjach, zazwyczaj sprowadza się do stworzenia nowej, zmodyfikowanej kolekcji. Tak jest z sort(), +=, sub etc. Jest to naleciałość z języków funkcyjnych i trzeba wiedzieć że tak jest, ale masz wersje alternatywne, jak sort!(), << czy sub! i możesz ich używać.