Quelle est la différence?
% 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}"]
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"]
% W effectue des substitutions normales entre guillemets doubles. % w ne le fait pas.
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
Documentation pour les chaînes de pourcentage: http://Ruby-doc.org/core-2.2.0/doc/syntax/literals_rdoc.html#label-Percent+Strings
%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}"]