web-dev-qa-db-fra.com

Ruby tableaux:% w vs% W

Quelle est la différence?

147
Allyn

% w guillemets comme les guillemets simples '' (pas d'interpolation variable, moins de séquences d'échappement), tandis que% W cite comme les 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}"]
227
Brian Campbell

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"]
29
aaandre

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

21
Brian

Bien qu'il s'agisse d'un ancien poste, la question revient sans cesse 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ée générale délimitée , 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 qu'elle nous donne accès aux fonctionnalités des guillemets simples et doubles. Avec des guillemets simples et des% w en 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 les guillemets doubles et les majuscules% W, nous avons accès à ces fonctionnalités.

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 vigueur.

Pour une description complète avec des exemples de% w et la liste complète, les caractères d'échappement et les délimiteurs - consultez: http://cyreath.blogspot.com/2014/05/Ruby-w-vs-w -secrets-révélé.html

Marque

10
Mark C
3
itsnikolay

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

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

%w est utilisé pour les éléments de tableau entre guillemets comme %q.

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