such rails cannot ruby-on-rails ruby rubocop

ruby on rails - rails - Use / en lugar de+o<< para concatenar esas cadenas



rubocop rails (2)

Estoy usando Rubocop para limpiar básicamente mi código desordenado ...

Uno de los errores fueron:

Use / en lugar de + o << para concatenar esas cadenas.

¿Por qué es esto?

No puedo encontrarlo en la documentación de Ruby . ¿Por qué usaría / lugar de + o << ?


En Ruby, las cadenas literales se asignan como objetos en la memoria cuando se encuentran. Si concatena dos literales de cadena, como en

str = "foo" + "bar"

de hecho, asignará tres objetos String : "foo" , "bar" y el resultado de la concatenación (a la que luego se hace referencia por str ).

Lo mismo sucede si lo haces:

"foo" << "bar"

En muchos casos, esto es solo una leve ineficiencia de la que no debería preocuparse demasiado.

Sin embargo, tenga en cuenta que si lo hace en un bucle, y si la String agregada crece, asignará un objeto String cada vez más grande en cada iteración (puede evitarlo al recopilar las partes de la cadena en un Array y luego llamar a join cuando haya terminado, también, foo << ''bar'' modificará foo en su lugar, lo que es aceptable en un bucle).

Al usar / no concatena objetos intermedios, sino que presenta efectivamente el analizador con un literal de String (porque / simplemente continúa la cadena en la siguiente línea).

El lenguaje "foo" + "bar" + "baz" se usa con frecuencia en Java, donde las cadenas son inmutables y los literales se concatenan en el momento de la compilación. (Cada cadena literal en Java solo se almacena una vez y luego se reutiliza en todo el código; Ruby no lo hace). Además, Java no tiene una mejor manera de continuar las cadenas en varias líneas, por lo que los programadores de Java lo hacen de esa manera.


/ al final de una línea evitará que el intérprete trate la nueva línea como final de la instrucción. Por lo tanto, puede hacer una cadena multilínea sin usar el costo de concatenación o adición.