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?
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?
Respuestas:
%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 convierte fooen un símbolo ( :foo)No conozco a nadie más, pero puede haber algo acechando allí ...
%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" <sender@example.com>) # => "\"sender name\" <sender@example.com>"
También hay %sque le permite crear cualquier símbolo, por ejemplo:
%s|some words| #Same as :'some words'
%s[other words] #Same as :'other words'
%s_last example_ #Same as :'last example'
Desde Ruby 2.0.0 también tienes:
%i( a b c ) # => [ :a, :b, :c ]
%i[ a b c ] # => [ :a, :b, :c ]
%i_ a b c _ # => [ :a, :b, :c ]
# etc...
%Wy le%w permite crear una matriz de cadenas sin utilizar comillas y comillas.
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! "
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.
# bad
STATES = ['draft', 'open', 'closed']
# good
STATES = %w[draft open closed]
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.
# bad
%w(one two three)
%i(one two three)
# good
%w[one two three]
%i[one two three]
Para más lee aquí .
Extraído de la documentación de Percent Strings en http://ruby-doc.org/core/doc/syntax/literals_rdoc.html#label-Percent+Strings :
Además de% (...) que crea una Cadena, el% puede crear otros tipos de objetos. Al igual que con las cadenas, una letra mayúscula permite la interpolación y los caracteres escapados, mientras que una letra minúscula los desactiva.
Estos son los tipos de cadenas porcentuales en ruby:
...
% w : Array of Strings
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:
names = %( Porter Smith
Jimmy Jones
Ronald Jackson).split('\n')
Esto resalta que %()crea una cadena como "Porter Smith\nJimmyJones\nRonald Jackson"y para obtener la matriz que splitla 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 quieres spaceque exista en la salida de la matriz final.