Recientemente decidimos en mi trabajo una guía de estilo Ruby. Uno de los edictos es que ninguna línea debe tener más de 80 caracteres. Como este es un proyecto de Rails, a menudo tenemos cadenas que son un poco más largas, es decir, "El usuario X quería enviarle un mensaje sobre la cosa Y" que no siempre encaja dentro del límite de 80 caracteres.Descomponer cadenas largas en varias líneas en Ruby sin eliminar líneas nuevas
entiendo que hay tres maneras de tener un lapso de cadena larga: varias líneas
- heredoc
- % Q} {
- real concatenación de cadenas.
Sin embargo, todos estos casos terminan tomando más ciclos de computación, lo que parece una tontería. Concatenación de cadenas obviamente, pero para HEREDOC y% Q tengo que eliminar las nuevas líneas, a través de algo como .gsub (/ \ n $ /, '').
¿Hay una forma de sintaxis pura para hacer esto, que es equivalente a simplemente tener toda la cadena en una línea? El objetivo es, obviamente, no gastar ningún ciclo extra solo porque quiero que mi código sea un poco más legible. (Sí, me doy cuenta de que tienes que cambiar mucho esa diferencia ... pero para la longitud de la cadena, esto parece tonto.)
Actualización: Las barras diagonales inversas no son exactamente lo que quiero porque pierdes sangría, lo que realmente afecta el estilo/legibilidad
Ejemplo:
if foo
string = "this is a \
string that spans lines"
end
me parece lo anterior un poco difícil de leer.
EDIT: He añadido una respuesta a continuación; tres años más tarde ahora tenemos el squiggly heredoc.
Puede ser que valga la pena objeto de eliminar esas cadenas. – Cheezmeister
posible duplicado de [Ruby: ¿Puedo escribir cadenas de múltiples líneas sin concatenación?] (Http://stackoverflow.com/questions/2337510/ruby-can-i-write-multi-line-string-with-no- concatenación) – givanse
No está claro si desea mantener '\ n' los caracteres de nueva línea o no. La respuesta principal no los mantiene, pero tu respuesta sí. La pregunta dice "sin quitar las nuevas líneas", pero la descripción dice "[...] Tengo que quitar las nuevas líneas". –