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 %weso? ¿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 conviertefooen 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
%sque le permite crear cualquier símbolo, por ejemplo:Desde Ruby 2.0.0 también tienes:
fuente
%Wy le%wpermite 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:
%wy%Wson ejemplos de tipos de entrada delimitados generales , que se relacionan con matrices. Hay otros tipos que incluyen%q,%Q,%r,%xy%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)%Wque 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
%wy 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 quesplitla 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óspacecuando quieresspaceque exista en la salida de la matriz final.fuente