Question Que signifie% w (tableau)?


Je regarde la documentation pour FileUtils. Je suis confus par la ligne suivante:

FileUtils.cp %w(cgi.rb complex.rb date.rb), '/usr/lib/ruby/1.6'

Que fait le %w signifier? Pouvez-vous me montrer la documentation?


701
2017-08-13 21:23


origine


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 quickref de zenspider.


1043
2017-08-13 21:28



je pense à %w() en tant que "tableau de mots" - les éléments sont délimités par des espaces.

Il y a 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 multi-ligne, 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 tourne foo dans un symbole (:foo)

Je n'en connais pas d'autres, mais il y en a peut-être qui s'y cachent ...


394
2017-08-13 23:06



Il y a aussi %s cela 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...

56
2017-07-23 20:16



%W et %w vous permet de créer un tableau de chaînes sans utiliser de guillemets et de guillemets.


29
2017-08-13 21:28



Bien que ce soit un vieux post, la question continue à venir et les réponses ne me semblent pas toujours claires, alors, voici mes pensées:

%w et %W sont des exemples d'entrées générales délimitées les types, qui se rapportent à Arrays. Il y a 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 caractéristiques des guillemets simples et doubles. Avec guillemets simples et (minuscules) %w, nous n'avons pas d'interpolation de code (#{someCode}) et une gamme limitée de caractères d'échappement qui fonctionnent (\\, \n). Avec des guillemets doubles et (majuscules) %W nous faire avoir 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 effet.

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 oeil à "Ruby -% w vs% W - secrets révélés!"


18
2018-05-30 08:00



Extrait de la documentation de Percent Strings à 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 dans ruby:
  ...
% w: Tableau de chaînes


10
2018-03-13 07:44



Au lieu de %w() nous devrions utiliser %w[]

Selon le guide de style de Ruby:

Préférez% w à la syntaxe du 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 littéraux en pourcentage.

[]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 plus de lecture ici.


9
2018-05-26 07:46



On m'a donné un tas de colonnes à partir d'une feuille de calcul CSV des noms complets des utilisateurs et j'avais besoin de garder le formatage, avec des espaces. Le moyen le plus simple que j'ai trouvé pour les avoir en utilisant ruby ​​é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 vous split la chaîne sur le "\n"  ["Porter Smith", "Jimmy Jones", "Ronald Jackson"]

Donc, pour répondre à la question initiale de l'OP aussi, ils auraient pu écrire %(cgi\ spaeinfilename.rb;complex.rb;date.rb).split(';') s'il est arrivé à être space quand tu veux le space pour exister dans la sortie du tableau final.


0
2017-09-08 15:32