Nous avons récemment décidé à mon travail d'un guide de style rubis. L'un des édits est qu'aucune ligne ne doit dépasser 80 caractères. Comme il s'agit d'un projet Rails, nous avons souvent des chaînes un peu plus longues - c'est-à-dire que «l' utilisateur X voulait vous envoyer un message sur la chose Y » qui ne correspond pas toujours à la limite de 80 caractères.
Je comprends qu'il y a trois façons d'avoir une longue chaîne de caractères sur plusieurs lignes:
- HEREDOC
- % Q {}
- Concaténation de chaîne réelle.
Cependant, tous ces cas finissent par prendre plus de cycles de calcul, ce qui semble idiot. Concaténation de chaîne évidemment, mais pour HEREDOC
et %Q
je dois supprimer les nouvelles lignes, via quelque chose comme .gsub(/\n$/, '')
.
Existe-t-il une méthode de syntaxe pure pour ce faire, qui équivaut à avoir simplement la chaîne entière sur une seule ligne? Le but étant évidemment de ne pas passer de cycles supplémentaires juste parce que je veux que mon code soit légèrement plus lisible. (Oui, je me rends compte que vous devez souvent faire ce compromis ... mais pour la longueur des cordes, cela semble tout simplement idiot.)
Mise à jour: les barres obliques inverses ne sont pas exactement ce que je veux, car vous perdez l'indentation, ce qui affecte vraiment le style / la lisibilité.
Exemple:
if foo
string = "this is a \
string that spans lines"
end
Je trouve ce qui précède un peu difficile à lire.
EDIT : J'ai ajouté une réponse ci-dessous; trois ans plus tard, nous avons maintenant l'hérédoc squiggly.
la source
\n
caractères de nouvelle ligne ou non. La première réponse ne les garde pas, mais votre réponse le fait. La question dit "sans supprimer les retours à la ligne" - mais la description dit "[...] je dois supprimer les retours à la ligne".Réponses:
C'est peut-être ce que vous cherchez?
la source
Vous pouvez utiliser
\
pour indiquer que n'importe quelle ligne de Ruby continue sur la ligne suivante. Cela fonctionne également avec les chaînes:affichera
"this is a string that spans lines"
la source
Trois ans plus tard, il existe maintenant une solution dans Ruby 2.3: l'hérédoc squiggly.
Lien de l'article de blog: https://infinum.co/the-capsized-eight/articles/multiline-strings-ruby-2-3-0-the-squiggly-heredoc
la source
<<~HEREDOC
conserve les caractères de nouvelle ligne, il supprime uniquement l'indentation. Par exempleline 1\nline 2\nline 3\n
J'ai eu ce problème lorsque j'essaie d'écrire une URL très longue, les travaux suivants.
Notez qu'il ne doit pas y avoir de sauts de ligne ni d'espaces blancs lorsque la chaîne d'URL est formée. Si vous souhaitez des retours à la ligne, utilisez HEREDOC.
Ici, vous avez une indentation pour la lisibilité, la facilité de modification, sans les guillemets et les barres obliques inverses sur chaque ligne. Le coût de la jonction des cordes doit être négligeable.
la source
J'ai modifié la réponse de Zack car je voulais des espaces et de l'interpolation mais pas des retours à la ligne et j'ai utilisé:
où
name = 'fred'
cela produitIt's a nice day "fred" for a walk!
la source