70 votes

Quel est le cas d'utilisation des méthodes de cotation% q /% Q de Ruby?

J'ai lu par Thomas de Programmation Ruby 1.9 et est venu sur l'alternative délimité simple et double citant des méthodes (%q / %Q). J'ai connu d'autres langage Ruby références.

%q/I'm acting like a single-quoted string/

%Q|"I'm acting like a double-quoted string" --Anonymous|

Je n'ai pas été travailler avec Ruby pour longtemps, mais j'ai jamais rencontré ce citant méthode dans le code de production.

Autres que l'évidente capacité à éviter l'interne s'échapper les guillemets par des barres obliques inverses, quels sont les cas d'utilisation de cette méthode de citer régulier sur les guillemets simples ou doubles? Sont-ils généralement utilisé en simple ou multi-chaînes? Si elle est utilisée dans plusieurs lignes de cordes, qui sont-ils jamais favorisé au détriment de l'HEREDOC cordes? Est-il un particulier Ruby idiome où ils sont généralement trouvés?

109voto

tadman Points 70178

Ils sont extrêmement utiles pour échapper HTML avec du JavaScript dans le cas où vous avez déjà "run out" de citer méthodes:

link = %q[<a href="javascript:method('call')">link</a>]

J'ai aussi trouvé pour être très utile lorsque vous travaillez avec plusieurs lignes d'instructions SQL:

execute(%Q[
  INSERT INTO table_a (column_a)
    SELECT value
      FROM table_b
      WHERE key='value'
])

L'avantage certain est que vous n'avez pas besoin de payer l'attention sur le type de citer utilisé au sein de votre requête. Il travaillera avec les simples, doubles, ou les deux. Ils sont aussi beaucoup moins de bruit que le HEREDOC style de méthode.

Ruby propose d'autres méthodes bien pratiques comme cela, comme %r qui peut construire des expressions régulières. Qui évite slash-il lorsque j'essaie d'en écrire un qui gère des trucs comme http:// qui auraient autrement échappé.

10voto

dreftymac Points 7843

Vue d'ensemble

En dehors de "éviter à l'interne s'échapper les guillemets" et les exemples fournis précédemment par @tadman il y a d'autres cas d'utilisation:

  • auto-génération de code dans la même langue que le générateur lui-même (par exemple, générer des Ruby Ruby)
  • fournir proprement formaté code qui ne confond pas la syntaxe-fonction de mise en surbrillance de votre éditeur de texte
  • permettre le stockage de codeblocks qui peuvent avoir à passer à travers de multiples couches d'enregistrement (comme une base de données de l'interaction avec un site web, ou de l'un des extraits de système de gestion de l'interaction avec un éditeur de texte, qui interagit avec un shell interne est exécuté, et ainsi de suite)

Détails

Cette approche est d'un usage général et robuste idiome qui fonctionne bien avec n'importe quel type d'outil qui ne automatisé de génération de code, y compris mais non limité à des outils d'écrire du code réutilisable dans d'autres langues, ou les outils qui gèrent les extraits de code pour un IDE ou un é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 le même ou sensiblement la même syntaxe que le code de la génération de programme.

Dans ces cas, la solution n'est beaucoup plus que de l'aider à éviter l'utilisation de barres obliques inverses à échapper les guillemets. Sans une solution de ce genre, il y a des cas où le code généré peut devenir extrêmement difficile à maintenir.

Pour voir des exemples de cela, n'hésitez pas à prendre un regard sur les références suivantes.

Références

[ Voir, par exemple,

]

3voto

Dan Garland Points 1127

Il est peut-être intéressant de noter que% q est utilisé par défaut par l’indicateur de réseau et le joaillier lors de la génération de gemspecs, pour la section summary / description de gemspec. Cela empêche quelqu'un d'utiliser des guillemets dans le résumé ou la description et de casser le gemspec.

-1voto

Douglas G. Allen Points 359

Jetez un coup d'œil à la méthode ri pour eval. Il a quelques exemples d'utilisation. Je suis sûr que n'importe quel eval utilisera quelque chose de similaire. Essayez ri class_eval ou ri module_eval ou ri instance_eval. Je cherchais simplement cette "chaîne q ruby" et la plus fréquente était http://www.techotopia.com/index.php/Ruby_Strings_-_Creation_and_Basics . J'espère que ça aidera quelqu'un.

-1voto

Peter Points 38320

Ils sont utiles lorsque votre chaîne contient des guillemets simples ou doubles. Cela n'arrive pas souvent, mais la technique est très utile quand cela se produit.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X