Tableaux Ruby:% w vs% W

152

Quelle est la différence?

Allyn
la source
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}"]
Brian Campbell
la source
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"]
aaandre
la source
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.

Brian
la source
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

Marque C
la source
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}"]
Faruk Hossen
la source
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!

Kasem007
la source