Recentemente, decidimos no meu trabalho um guia de estilo rubi. Um dos editais é que nenhuma linha deve ter mais de 80 caracteres. Como este é um projeto do Rails, geralmente temos sequências um pouco mais longas - ou seja, "O usuário X queria enviar uma mensagem sobre o Coisa Y " que nem sempre se encaixa dentro do limite de 80 caracteres.
Entendo que há três maneiras de ter uma longa cadeia de caracteres abrangendo várias linhas:
- HEREDOC
- % Q {}
- Concatenação de string real.
No entanto, todos esses casos acabam tendo mais ciclos de computação, o que parece bobo. Concatenação de strings obviamente, mas para HEREDOC
e %Q
eu tenho que retirar as novas linhas, através de algo como .gsub(/\n$/, '')
.
Existe uma maneira pura de sintaxe para fazer isso, que é equivalente a apenas ter toda a cadeia em uma linha? O objetivo é, obviamente, não gastar ciclos extras apenas porque quero que meu código seja um pouco mais legível. (Sim, eu sei que você precisa fazer muito isso ... mas, para o comprimento da corda, isso parece bobagem.)
Atualização: as barras invertidas não são exatamente o que eu quero, porque você perde o recuo, o que realmente afeta o estilo / legibilidade.
Exemplo:
if foo
string = "this is a \
string that spans lines"
end
Acho o exposto um pouco difícil de ler.
EDIT : eu adicionei uma resposta abaixo; três anos depois, agora temos o heredoc irritadiço.
fonte
\n
caracteres de nova linha ou não. A resposta principal não os mantém - mas sua resposta sim. A pergunta diz "sem remover novas linhas" - mas a descrição diz "[...] eu tenho que retirar as novas linhas".Respostas:
Talvez seja isso que você está procurando?
fonte
Você pode usar
\
para indicar que qualquer linha do Ruby continua na próxima linha. Isso funciona com strings também:irá produzir
"this is a string that spans lines"
fonte
Três anos depois, agora existe uma solução no Ruby 2.3: O heredoc irritadiço.
Link para postagem no blog: https://infinum.co/the-capsized-eight/articles/multiline-strings-ruby-2-3-0-the-squiggly-heredoc
fonte
<<~HEREDOC
mantém os caracteres da nova linha, isso apenas livra o recuo. Por exemploline 1\nline 2\nline 3\n
Eu tive esse problema ao tentar escrever um URL muito longo, o seguinte funciona.
Observe que não deve haver novas linhas, espaços em branco quando a sequência de URLs é formada. Se você deseja novas linhas, use HEREDOC.
Aqui você tem recuo para facilitar a leitura, sem modificar aspas e barras invertidas em todas as linhas. O custo de união das strings deve ser insignificante.
fonte
Modifiquei a resposta de Zack, pois queria espaços e interpolação, mas não novas linhas, e usei:
onde
name = 'fred'
isso produzIt's a nice day "fred" for a walk!
fonte