Je regarde la documentation de FileUtils.
Je suis confus par la ligne suivante:
FileUtils.cp %w(cgi.rb complex.rb date.rb), '/usr/lib/ruby/1.6'
Qu'est-ce que cela %w
signifie? Pouvez-vous m'indiquer la documentation?
Je regarde la documentation de FileUtils.
Je suis confus par la ligne suivante:
FileUtils.cp %w(cgi.rb complex.rb date.rb), '/usr/lib/ruby/1.6'
Qu'est-ce que cela %w
signifie? Pouvez-vous m'indiquer la documentation?
Réponses:
%w(foo bar)
est un raccourci pour ["foo", "bar"]
. Ce qui signifie que c'est une notation pour écrire un tableau de chaînes séparées par des espaces au lieu de virgules et sans guillemets autour d'eux. Vous pouvez trouver une liste de façons d'écrire des littéraux dans la référence rapide de zenspider .
%w(ab\ c def) # => ["ab c", "def"]
je pense à %w()
à un "tableau de mots" - les éléments sont délimités par des espaces et cela renvoie un tableau de chaînes.
Il existe d'autres% littéraux:
%r()
est une autre façon d'écrire une expression régulière.%q()
est une autre façon d'écrire une chaîne entre guillemets simples (et peut être multiligne, ce qui est utile)%Q()
donne une chaîne entre guillemets%x()
est une commande shell%i()
donne un tableau de symboles (Ruby> = 2.0.0)%s()
se transforme foo
en symbole ( :foo
)Je n'en connais pas d'autres, mais il y a peut-être des cachettes là-dedans ...
%i()
pour générer un tableau de symboles.
%()
(ou %[]
ou %{}
) qui donne une chaîne entre guillemets doubles et échappe les guillemets doubles, comme %Q()
. Par exemple%("sender name" <sender@example.com>) # => "\"sender name\" <sender@example.com>"
Il y a aussi %s
qui vous permet de créer des symboles, par exemple:
%s|some words| #Same as :'some words'
%s[other words] #Same as :'other words'
%s_last example_ #Same as :'last example'
Depuis Ruby 2.0.0, vous avez également:
%i( a b c ) # => [ :a, :b, :c ]
%i[ a b c ] # => [ :a, :b, :c ]
%i_ a b c _ # => [ :a, :b, :c ]
# etc...
%W
et%w
vous permet de créer un tableau de chaînes sans utiliser de guillemets et de virgules.
Bien qu'il s'agisse d'un ancien post, la question revient sans cesse et les réponses ne me semblent pas toujours claires, alors voici mes réflexions:
%w
et %W
sont des exemples de types d' entrées générales délimitées , qui se rapportent aux tableaux. Il existe d'autres types qui incluent %q
,%Q
, %r
, %x
et %i
.
La différence entre la version majuscule et minuscule est qu'elle nous donne accès aux fonctionnalités des guillemets simples et doubles. Avec des guillemets simples et (en minuscules) %w
, nous n'avons pas d'interpolation de code ( #{someCode}
) et une plage limitée de caractères d'échappement qui fonctionnent ( \\
,\n
). Avec des guillemets doubles et (majuscules) %W
nous faisons 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 vigueur.
Pour une écriture complète avec des exemples de %w
et la liste complète, les caractères d'échappement et les délimiteurs, jetez un œil à " Ruby -% w vs% W - les secrets révélés! "
Au lieu de %w()
nous devrions utiliser%w[]
Selon le guide de style Ruby:
Préférez% w à la syntaxe de tableau littéral lorsque vous avez besoin d'un tableau de mots (chaînes non vides sans espaces et caractères spéciaux). Appliquez cette règle uniquement aux tableaux avec deux éléments ou plus.
# bad
STATES = ['draft', 'open', 'closed']
# good
STATES = %w[draft open closed]
Utilisez les accolades les plus appropriées pour les différents types de pourcentages de littéraux.
[]
pour les littéraux de tableau ( %w, %i, %W, %I
) car il est aligné avec les littéraux de tableau standard.
# bad
%w(one two three)
%i(one two three)
# good
%w[one two three]
%i[one two three]
Pour en savoir plus, lisez ici .
Extrait de la documentation de Percent Strings sur http://ruby-doc.org/core/doc/syntax/literals_rdoc.html#label-Percent+Strings :
Outre% (...) qui crée une chaîne, le% peut créer d'autres types d'objets. Comme pour les chaînes, une lettre majuscule permet l'interpolation et les caractères d'échappement tandis qu'une lettre minuscule les désactive.
Ce sont les types de chaînes de pourcentage en rubis:
...
% w : tableau de chaînes
On m'a donné un tas de colonnes à partir d'une feuille de calcul CSV de noms complets d'utilisateurs et je devais garder la mise en forme, avec des espaces. Le moyen le plus simple que j'ai trouvé pour les intégrer lors de l'utilisation de rubis était de faire:
names = %( Porter Smith
Jimmy Jones
Ronald Jackson).split('\n')
Cela met en évidence que %()
crée une chaîne comme "Porter Smith\nJimmyJones\nRonald Jackson"
et pour obtenir le tableau de split
la chaîne sur le"\n"
["Porter Smith", "Jimmy Jones", "Ronald Jackson"]
Donc, pour répondre aussi à la question d'origine de l'OP, ils auraient pu écrire %(cgi\ spaeinfilename.rb;complex.rb;date.rb).split(';')
s'il y en avait space
quand vous voulez que cela space
existe dans la sortie finale du tableau.