Veo una gran cantidad de este tipo de esta pasando en Rubí:¿Cómo se << difiere de +?
myString = "Hello " << "there!"
¿Cómo es esto diferente de hacer
myString = "Hello " + "there!"
Veo una gran cantidad de este tipo de esta pasando en Rubí:¿Cómo se << difiere de +?
myString = "Hello " << "there!"
¿Cómo es esto diferente de hacer
myString = "Hello " + "there!"
En Ruby, cuerdas son mutables. Es decir, un valor de cadena puede cambiarse, no reemplazarse con otro objeto. x << y
realmente agregará la cadena y a x, mientras que x + y
creará una nueva Cadena y la devolverá.
Esto se puede comprobar simplemente en el intérprete de Ruby:
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"
En particular, vemos que x + "there"
regresaron "hellotherethere" pero el valor de x
se mantuvo sin cambios. Tenga cuidado con las cuerdas mutables, pueden venir y morderlo. La mayoría de los otros lenguajes administrados no tienen cadenas mutables.
Tenga en cuenta también que muchos de los métodos en cadena tiene versiones tanto destructivos y no destructivos: x.upcase
devolverá una nueva cadena que contiene la versión mayúscula de x, x, dejando solo; x.upcase!
devolverá el valor de mayúscula -y- modificará el objeto apuntado por x.
Una excelente explicación. x = "Muchos"; x << "¡gracias!" –
BTW: Esto también se aplica a la mayoría de los otros objetos de colección en Ruby. 'Array # <<' se agrega al mutar, 'Array # +' se agrega al crear una nueva matriz. 'Set # <<' está agregando un elemento al conjunto, 'Set # +' es set union. Y así. –