Recientemente decidimos en mi trabajo una guía de estilo rubí. Uno de los edictos es que ninguna línea debe tener más de 80 caracteres. Dado que este es un proyecto de Rails, a menudo tenemos cadenas que son un poco más largas, es decir, "El usuario X quería enviarte un mensaje sobre Cosa Y " que no siempre se ajusta al límite de estilo de 80 caracteres.
Entiendo que hay tres formas de hacer que una cadena larga abarque varias líneas:
- HEREDOC
- % Q {}
- Concatenación de cadenas real.
Sin embargo, todos estos casos terminan tomando más ciclos de cálculo, lo que parece una tontería. La concatenación de cadenas obviamente, pero para HEREDOC
y %Q
tengo que quitar las nuevas líneas, a través de algo así .gsub(/\n$/, '')
.
¿Existe una forma de sintaxis pura para hacer esto, que es equivalente a tener toda la cadena en una línea? El objetivo es, obviamente, no gastar ningún ciclo adicional solo porque quiero que mi código sea un poco más legible. (Sí, me doy cuenta de que tienes que hacer mucho eso ... pero para la longitud de la cuerda, esto parece una tontería).
Actualización: las barras invertidas no son exactamente lo que quiero porque pierdes la sangría, lo que realmente afecta el estilo / legibilidad.
Ejemplo:
if foo
string = "this is a \
string that spans lines"
end
Encuentro lo anterior un poco difícil de leer.
EDITAR : agregué una respuesta a continuación; tres años después ahora tenemos el heredoc ondulado.
fuente
\n
caracteres de nueva línea o no. La respuesta principal no los mantiene, pero su respuesta sí. La pregunta dice "sin quitar nuevas líneas", pero la descripción dice "[...] tengo que quitar las nuevas líneas".Respuestas:
Tal vez esto es lo que estás buscando?
fuente
Puede usar
\
para indicar que cualquier línea de Ruby continúa en la siguiente línea. Esto también funciona con cadenas:saldrá
"this is a string that spans lines"
fuente
Tres años después, ahora hay una solución en Ruby 2.3: el heredoc ondulado.
Enlace de publicación del blog: https://infinum.co/the-capsized-eight/articles/multiline-strings-ruby-2-3-0-the-squiggly-heredoc
fuente
<<~HEREDOC
mantiene los caracteres de nueva línea, solo elimina la sangría. Por ejemploline 1\nline 2\nline 3\n
Tuve este problema cuando trato de escribir una URL muy larga, lo siguiente funciona.
Tenga en cuenta que no debe haber ninguna línea nueva, espacios en blanco cuando se forma la cadena de url. Si desea nuevas líneas, entonces use HEREDOC.
Aquí tiene una sangría para facilitar la lectura, facilitar la modificación, sin las comillas y las barras invertidas en cada línea. El costo de unir las cadenas debe ser insignificante.
fuente
Modifiqué la respuesta de Zack ya que quería espacios e interpolación, pero no líneas nuevas y usé:
donde
name = 'fred'
esto produceIt's a nice day "fred" for a walk!
fuente