¿Qué significa %w(matriz)?
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
? ¿Puede indicarme la documentación?
%w(foo bar)
es un atajo para ["foo", "bar"]
. Lo que significa que es una notación para escribir una serie de cadenas separadas por espacios en lugar de comas y sin comillas. Puede encontrar una lista de formas de escribir literales en la referencia rápida de zenspider .
Lo considero %w()
una "matriz de palabras": los elementos están delimitados por espacios y devuelve una matriz de cadenas.
Aquí están todos los % literales :
%w()
conjunto de cuerdas%r()
expresión regular.%q()
cadena%x()
un comando de shell (que devuelve la cadena de salida)%i()
matriz de símbolos (Ruby >= 2.0.0)%s()
símbolo%()
(sin letra) atajo para%Q()
Los delimitadores (
y )
se pueden reemplazar con muchas variaciones, como [
y ]
,,, etc.|
!
Cuando utilice una letra mayúscula, %W()
puede utilizar la interpolación de cadenas #{variable}
, similar a los delimitadores de cadenas "
y '
. Esta regla también funciona para todos los demás % literales.
abc = 'a b c'
%w[1 2#{abc} d] #=> ["1", "2\#{abc}", "d"]
%W[1 2#{abc} d] #=> ["1", "2a b c", "d"]
También hay uno %s
que 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...
%W
y%w
le permite crear una matriz de cadenas sin utilizar comillas ni comas.
Aunque es una publicación antigua, la pregunta sigue surgiendo y las respuestas no siempre me parecen claras, así que aquí está mi opinión:
%w
y son ejemplos de tipos%W
de entrada delimitada general , que se relacionan con matrices. Hay otros tipos que incluyen , , y .%q
%Q
%r
%x
%i
La diferencia entre la versión en mayúsculas y minúsculas es que nos da acceso a las funciones 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) sí%W
tenemos acceso a estas funciones.
El delimitador utilizado puede ser cualquier carácter, no sólo el paréntesis abierto. Juegue con los ejemplos anteriores para ver cómo funciona.
Para obtener un artículo completo con ejemplos %w
y la lista completa, caracteres de escape y delimitadores, consulte " Ruby - %w vs %W – ¡secretos revelados! "