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?
%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 transformefoo
en symbole (:foo
)Je n'en connais pas d'autres, mais il y a peut-être des cachettes là-dedans ...
la source
%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" <[email protected]>) # => "\"sender name\" <[email protected]>"
Il y a aussi
%s
qui vous permet de créer des symboles, par exemple:Depuis Ruby 2.0.0, vous avez également:
la source
%W
et%w
vous permet de créer un tableau de chaînes sans utiliser de guillemets et de virgules.la source
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! "la source
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.
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.Pour en savoir plus, lisez ici .
la source
Extrait de la documentation de Percent Strings sur http://ruby-doc.org/core/doc/syntax/literals_rdoc.html#label-Percent+Strings :
la source
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:
Cela met en évidence que
%()
crée une chaîne comme"Porter Smith\nJimmyJones\nRonald Jackson"
et pour obtenir le tableau desplit
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 avaitspace
quand vous voulez que celaspace
existe dans la sortie finale du tableau.la source