Tableaux Ruby:% w vs% W


152

Quelle est la différence?


18
"% w" est ma réplique habituelle aux gens qui sont un peu trop arrogants quant à la lisibilité de Ruby. Fonctionne à chaque fois.
Craig Stuntz

maintenant vous avez une réponse encore meilleure :-)
errata

6
Comme note secondaire non pertinente, l'URL de cette question m'a dérouté pendant un moment pendant le chargement de la page.
Fund Monica's Lawsuit

Réponses:


233

% w guillemets comme des guillemets simples ''(pas d'interpolation de variable, moins de séquences d'échappement), tandis que% W entre guillemets comme des guillemets doubles "".

irb(main):001:0> foo="hello"
=> "hello"
irb(main):002:0> %W(foo bar baz #{foo})
=> ["foo", "bar", "baz", "hello"]
irb(main):003:0> %w(foo bar baz #{foo})
=> ["foo", "bar", "baz", "\#{foo}"]

Votre exemple montre également des guillemets doubles pour% w. Est-ce correct?
Foton

Oui. Lors de l'impression de la sortie, Ruby utilise toujours des guillemets doubles et des caractères d'échappement tels que #. '#{foo}'et "\#{foo}"vous donner la même chaîne, que vous pouvez vérifier avec '#{foo}' == "\#{foo}"dans irb.
Brian Campbell

C'est peu déroutant à première vue, mais merci pour l'explication.
Foton

29

Une application que j'ai trouvée pour% W vs% w:

greetings = %W(hi hello #{"how do you do"})
# => ["hi", "hello", "how do you do"]

12
Bien que dans ce cas, il soit probablement plus facile de le fairegreetings = %w(hi hello how\ do\ you\ do)
dinjas

21

% W effectue des substitutions normales entre guillemets doubles. % w ne le fait pas.


11

Bien qu'il s'agisse d'un ancien post, la question ne cesse de se poser et les réponses ne me semblent pas toujours claires. Alors, voici mes pensées.

% w et% W sont des exemples de types d' entrées délimitées générales , qui se rapportent aux tableaux. Il existe d'autres types qui incluent% q,% Q,% r,% x et% i.

La différence entre les majuscules et les minuscules est que cela nous donne accès aux fonctionnalités des guillemets simples et doubles. Avec des guillemets simples et% w minuscules, nous n'avons pas d'interpolation de code (par exemple # {someCode}) et une plage limitée de caractères d'échappement qui fonctionnent (par exemple \, \ n). Avec des guillemets doubles et% en majuscules W nous n'avons accès à ces fonctions.

Le délimiteur utilisé peut être n'importe quel caractère, pas seulement la parenthèse ouverte. Jouez avec les exemples ci-dessus pour voir cela en effet.

Pour une rédaction complète avec des exemples de% w et la liste complète, les caractères d'échappement et les délimiteurs - jetez un œil à: http://cyreath.blogspot.com/2014/05/ruby-w-vs-w-secrets-revealed .html

marque


1
C'est un bon article. Je ne savais pas que vous pouviez créer des chaînes ou d'autres choses de la même manière et que les caractères englobants pouvaient être ce que vous vouliez. Par exemple,%w&readable af&
Dex


1

%West utilisé pour les éléments de tableau entre guillemets comme %Q, par exemple,

foo = "!"
%W{hello world #{foo}} # => ["hello", "world", "!"]

%west utilisé pour les éléments de tableau entre guillemets simples comme %q.

%w(hello world #{foo})
# => ["hello","world", "\#{foo}"]

0
array = %w(a b c d) 

Pareil que

array = ["a", "b", "c", "d"]

%w est un symbole de raccourci pour le guillemet à la chaîne!

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.