[Ruby] Cosa significa% w (array)?


Answers

Penso a %w() come a un "array di parole": gli elementi sono delimitati da spazi.

Ci sono altri% letterali:

  • %r() è un altro modo per scrivere un'espressione regolare.
  • %q() è un altro modo per scrivere una stringa con quotatura singola (e può essere multilinea, che è utile)
  • %Q() fornisce una stringa con virgolette
  • %x() è un comando di shell
  • %i() fornisce una matrice di simboli (Ruby> = 2.0.0)
  • %s() trasforma foo in un simbolo ( :foo )

Non ne conosco altri, ma potrebbero esserci dei lurk in giro ...

Question

Sto guardando la documentazione per FileUtils. Sono confuso dalla seguente riga:

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

Cosa significa %w ? Puoi indicarmi la documentazione?




%W e %w consentono di creare una matrice di stringhe senza utilizzare virgolette e virgole.




Estratto dalla documentazione di Percent Strings su http://ruby-doc.org/core/doc/syntax/literals_rdoc.html#label-Percent+Strings :

Oltre a% (...) che crea una stringa,% può creare altri tipi di oggetto. Come con le stringhe, una lettera maiuscola consente l'interpolazione e caratteri di escape mentre una lettera minuscola li disabilita.

Questi sono i tipi di stringhe percentuali in ruby:
...
% w : Array of Strings




Mi è stato dato un mucchio di colonne da un foglio di calcolo CSV con nomi completi di utenti e avevo bisogno di mantenere la formattazione, con spazi. Il modo più semplice che ho trovato per farli entrare durante l'utilizzo di Ruby era quello di fare:

names = %( Porter Smith
Jimmy Jones
Ronald Jackson).split('\n')

Questo evidenzia che %() crea una stringa come "Porter Smith\nJimmyJones\nRonald Jackson" e per ottenere l'array si split la stringa su "\n" ["Porter Smith", "Jimmy Jones", "Ronald Jackson"]

Quindi, per rispondere anche alla domanda originale dell'OP, avrebbero potuto scrivere %(cgi\ spaeinfilename.rb;complex.rb;date.rb).split(';') se ci fosse space quando vuoi che lo space esista in l'output finale dell'array.