¿Qué significa %w(matriz)?

Resuelto Dane O'Connor asked hace 15 años • 8 respuestas

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?

Dane O'Connor avatar Aug 14 '09 04:08 Dane O'Connor
Aceptado

%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 .

sepp2k avatar Aug 13 '2009 21:08 sepp2k

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"]
Mike Woodhouse avatar Aug 13 '2009 23:08 Mike Woodhouse

También hay uno %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...
Eraden avatar Jul 23 '2011 20:07 Eraden

%Wy%w le permite crear una matriz de cadenas sin utilizar comillas ni comas.

Evan Meagher avatar Aug 13 '2009 21:08 Evan Meagher

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:

%wy 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) %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 %wy la lista completa, caracteres de escape y delimitadores, consulte " Ruby - %w vs %W – ¡secretos revelados! "

Mark C avatar May 30 '2014 08:05 Mark C