ruby - print - ¿Qué significa% w(array)?
ruby print array (8)
Estoy mirando la documentación para FileUtils. Estoy confundido por la siguiente línea:
FileUtils.cp %w(cgi.rb complex.rb date.rb), ''/usr/lib/ruby/1.6''
¿Qué significa el %w
? ¿Me puede indicar la documentación?
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 entradas delimitadas generales, que se relacionan con matrices. Hay otros tipos que incluyen %q
, %Q
, %r
, %x
y %i
.
La diferencia entre la versión mayúscula y minúscula es que nos da acceso a las funciones de comillas simples y dobles. Con comillas simples y (en 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 (en mayúsculas) %W
, tenemos acceso a estas funciones.
El delimitador utilizado puede ser cualquier carácter, no solo el paréntesis abierto. Juega con los ejemplos anteriores para ver que en efecto.
Para un resumen completo con ejemplos de %w
y la lista completa, personajes de escape y delimitadores, eche un vistazo a " Ruby -% w vs% W - ¡Se revelaron secretos! "
En lugar de %w()
deberíamos usar %w[]
Según guía de estilo rubí:
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 matrices con dos o más elementos.
# bad
STATES = [''draft'', ''open'', ''closed'']
# good
STATES = %w[draft open closed]
Use las llaves que sean las más adecuadas para los distintos tipos de porcentajes literales.
[]
para 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 leer here .
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 objeto. 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 al usar 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 se split
la cadena en "/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 hubiera space
cuando desea que el space
exista en La salida final de la matriz.
Pienso en %w()
como una "matriz de palabras": los elementos están delimitados por espacios y devuelve una matriz 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 multilínea, lo que es útil) -
%Q()
da una cadena entre comillas dobles -
%x()
es un comando de shell -
%i()
da una matriz de símbolos (Ruby> = 2.0.0) -
%s()
conviertefoo
en un símbolo (:foo
)
No conozco a ningún otro, pero puede haber algunos merodeando por ahí ...
También hay %s
que te 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...
%W
y %w
permiten crear una matriz de cadenas sin usar comillas y comillas.
%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 alrededor de ellas. Puedes encontrar una lista de formas de escribir literales en quickref de zenspider .