Estoy mirando la documentación de FileUtils.
Estoy confundido por la siguiente línea:
FileUtils.cp %w(cgi.rb complex.rb date.rb), '/usr/lib/ruby/1.6'
¿Qué significa %w
eso? ¿Me puede indicar la documentación?
%w(foo bar)
es un acceso directo para ["foo", "bar"]
. Lo que significa que es una notación escribir una matriz de cadenas separadas por espacios en lugar de comas y sin comillas a su alrededor. Puede encontrar una lista de formas de escribir literales en la referencia rápida de zenspider .
%w(ab\ c def) # => ["ab c", "def"]
Pienso
%w()
en un "conjunto de palabras": los elementos están delimitados por espacios y devuelve un conjunto de cadenas.Hay otros% literales:
%r()
Es otra forma de escribir una expresión regular.%q()
es otra forma de escribir una cadena entre comillas simples (y puede ser de varias líneas, lo cual es útil)%Q()
da una cadena entre comillas dobles%x()
es un comando de shell%i()
da una serie de símbolos (Ruby> = 2.0.0)%s()
se conviertefoo
en un símbolo (:foo
)No conozco a nadie más, pero puede haber algo acechando allí ...
fuente
%i()
para generar una serie de símbolos.%()
(o%[]
o%{}
) que da una cadena entre comillas dobles y se escapa comillas dobles, como%Q()
. Ej .%("sender name" <[email protected]>) # => "\"sender name\" <[email protected]>"
También hay
%s
que le permite crear cualquier símbolo, por ejemplo:Desde Ruby 2.0.0 también tienes:
fuente
%W
y le%w
permite crear una matriz de cadenas sin utilizar comillas y comillas.fuente
Aunque es una publicación antigua, la pregunta sigue apareciendo y las respuestas no siempre me parecen claras, así que aquí están mis pensamientos:
%w
y%W
son ejemplos de tipos de entrada delimitados generales , que se relacionan con matrices. Hay otros tipos que incluyen%q
,%Q
,%r
,%x
y%i
.La diferencia entre la versión en mayúsculas y minúsculas es que nos da acceso a las características de comillas simples y dobles. Con comillas simples y (minúsculas)
%w
, no tenemos interpolación de código (#{someCode}
) y un rango limitado de caracteres de escape que funcionan (\\
,\n
). Con comillas dobles y (mayúsculas)%W
que sí tienen acceso a estas características.El delimitador utilizado puede ser cualquier carácter, no solo el paréntesis abierto. Juega con los ejemplos anteriores para ver eso en efecto.
Para una redacción completa con ejemplos
%w
y la lista completa, caracteres de escape y delimitadores, eche un vistazo a "¡ Ruby -% w vs% W - secretos revelados! "fuente
En lugar de
%w()
usar%w[]
De acuerdo con la guía de estilo Ruby:
Prefiera% w a la sintaxis de matriz literal cuando necesite una matriz de palabras (cadenas no vacías sin espacios y caracteres especiales en ellas). Aplique esta regla solo a las matrices con dos o más elementos.
Use las llaves más apropiadas para los diversos tipos de literales porcentuales.
[]
para los literales de matriz (%w, %i, %W, %I
), ya que está alineado con los literales de matriz estándar.Para más lee aquí .
fuente
Extraído de la documentación de Percent Strings en http://ruby-doc.org/core/doc/syntax/literals_rdoc.html#label-Percent+Strings :
fuente
Me dieron un montón de columnas de una hoja de cálculo CSV de nombres completos de usuarios y necesitaba mantener el formato, con espacios. La forma más fácil que encontré para obtenerlos mientras usaba Ruby fue hacer:
Esto resalta que
%()
crea una cadena como"Porter Smith\nJimmyJones\nRonald Jackson"
y para obtener la matriz quesplit
la cadena en el"\n"
["Porter Smith", "Jimmy Jones", "Ronald Jackson"]
Entonces, para responder también a la pregunta original del OP, podrían haber escrito
%(cgi\ spaeinfilename.rb;complex.rb;date.rb).split(';')
si sucedióspace
cuando quieresspace
que exista en la salida de la matriz final.fuente