"mejor" depende en gran medida de su caso de uso, pero Consideremos el siguiente código:
a = 'shirts'
b = a
params = {}
params[:id] = b
params[:id] << '/'
params[:id] #=> "shirts/"
Como es de esperar, <<
ha añadido una barra, pero ...
a #=> "shirts/"
# a has changed too!
Así Dependiendo de su nivel de comprensión con estos métodos, este es un comportamiento que quizás no espere. Compare con:
params[:id] += '/'
params[:id] #=> "shirts/"
a #=> "shirts"
# a remains the same
Básicamente, algunos métodos crean objetos nuevos y otros modifican los existentes. Podemos probar esto con el object_id método.
str1 = 'a'
str2 = str1
str1.object_id #=> 14310680
str2.object_id #=> 14310680
# Both str1 and str2 point to the same object
Ahora
str1 << 'b' #=> "ab"
str1.object_id #=> 14310680
str2 #=> "ab"
Hemos modificado con éxito str1 sin crear un nuevo objeto y desde str2 sigue apuntando al mismo objeto también obtiene la "actualización". Por último, si usamos el método de +=
:
str1 #=> "ab"
str1 += '' #=> "ab"
str1.object_id #=> 15078280
str2.object_id #=> 14310680
en cuenta que hemos añadido nada a str1 pero todavía crea un nuevo objeto.