J'ai lu à travers la programmation de Thomas Ruby 1.9 et suis tombé sur les méthodes alternatives délimitées de guillemets simples et doubles (%q / %Q
). Je les connais d'autres références de langage Ruby également.
%q/I'm acting like a single-quoted string/
%Q|"I'm acting like a double-quoted string" --Anonymous|
Je ne travaille pas avec Ruby depuis longtemps, mais je n'ai jamais rencontré cette méthode de citation dans le code de production.
Mis à part la capacité évidente de éviter les guillemets échappant en interne avec des barres obliques inverses, quels sont les cas d'utilisation courants pour cette méthode de citation sur des guillemets simples ou doubles réguliers? Sont-ils généralement utilisés dans des chaînes simples ou multilignes? S'ils sont utilisés dans des cordes multilignes, sont-ils jamais préférés aux cordes HEREDOC? Existe-t-il un idiome particulier Ruby où ils se trouvent couramment?
Ils sont extrêmement utiles pour échapper au HTML avec JavaScript là où vous avez déjà "épuisé" les méthodes de citation:
link = %q[<a href="javascript:method('call')">link</a>]
Je les ai également trouvés très utiles lorsque vous travaillez avec des instructions SQL multilignes:
execute(%Q[
INSERT INTO table_a (column_a)
SELECT value
FROM table_b
WHERE key='value'
])
L'avantage est que vous n'avez pas besoin de faire attention au type de devis utilisé dans votre requête. Il fonctionnera avec simple, double ou les deux. Ils sont également beaucoup moins chiants que la méthode de style HEREDOC.
Ruby propose d'autres méthodes pratiques telles que %r
qui peut construire des expressions régulières. Cela évite les slash-itis lorsque vous essayez d'en écrire un qui gère des trucs comme http://
qui devrait autrement être échappé.
Outre "éviter les citations échappant en interne" et les exemples précédemment fournis par @tadman, il existe également d'autres cas d'utilisation:
Cette approche est un idiome polyvalent et robuste qui fonctionne bien avec tout type d'outil qui génère automatiquement du code, y compris, mais sans s'y limiter, des outils qui écrivent du code standard dans d'autres langues, ou des outils qui gèrent des extraits de code pour un IDE ou éditeur de texte.
Outre les exemples déjà fournis par @tadman, il y a le cas général de la génération de code où le code généré est la même syntaxe ou sensiblement similaire que le code du programme de génération.
Dans ces cas, la solution fait beaucoup plus que d'aider à éviter l'utilisation de barres obliques inverses pour échapper aux guillemets. Sans une telle solution, il existe des cas où le code généré peut devenir extrêmement difficile à maintenir.
Pour en voir des exemples, n'hésitez pas à consulter les références suivantes.
[Voir par exemple,
]
Il vaut peut-être la peine de noter que% q est utilisé par bundler et bijoutier par défaut lors de la génération de gemspecs, pour la section résumé/description de la gemspec. Cela empêche quelqu'un d'utiliser des guillemets dans le résumé ou la description et de casser le gemspec.
Je sais que c'est un vieux thread, mais je les ai utilisés en production lors de l'appel d'une commande system et en voulant interpoler certaines valeurs, comme ceci:
system(%Q(ffmpeg -y -i "#{input_filepath}" -qscale:a 2 "#{output_filepath}"))
Super pratique.