2010-01-16 19 views

Antwort

25

In Ruby tun, Streichern wandelbar sind. Das heißt, ein String-Wert kann tatsächlich geändert werden und nicht nur durch ein anderes Objekt ersetzt werden. x << y fügt tatsächlich die Zeichenfolge y zu x hinzu, während x + y einen neuen String erstellt und diesen zurückgibt.

Dies kann einfach in den Ruby-Interpreter getestet werden:

irb(main):001:0> x = "hello" 
=> "hello" 
irb(main):002:0> x << "there" 
=> "hellothere" 
irb(main):003:0> x 
=> "hellothere" 
irb(main):004:0> x + "there" 
=> "hellotherethere" 
irb(main):005:0> x 
=> "hellothere" 

sieht Bemerkenswert ist, dass x + "there" "hellotherethere" ergab aber der Wert von x war unverändert. Sei vorsichtig mit veränderlichen Saiten, sie können dich beißen und beißen. Die meisten anderen verwalteten Sprachen verfügen nicht über veränderbare Zeichenfolgen.

Beachten Sie auch, dass viele der Methoden in String sowohl destruktive als auch nicht-destruktive Versionen haben: x.upcase wird eine neue Zeichenfolge zurückgeben, die die Großbuchstabenversion von x enthält, während x allein gelassen wird; x.upcase! gibt den oberen Wert zurück und ändert das Objekt, auf das x zeigt.

+1

Eine ausgezeichnete Erklärung. x = "Viele"; x << "Danke!" –

+4

BTW: Dies gilt auch für die meisten anderen Collection-Objekte in Ruby. 'Array # <<' hängt an, indem es mutiert, 'Array # +' hängt an, indem ein neues Array erstellt wird. 'Set # <<' fügt dem Set ein Element hinzu, 'Set # +' setzt Union. Und so weiter. –