2009-03-27 17 views
129

¿Cuál es la diferencia?Matrices de rubíes:% w vs% W

+13

"% w" es mi réplica habitual a las personas que se vuelven demasiado arrogantes con respecto a la legibilidad de Ruby. Funciona todo el tiempo. –

+0

ahora tiene una respuesta aún mejor :-) – errata

+4

Como nota lateral irrelevante, la URL de esta pregunta me confundió por un tiempo mientras la página se estaba cargando. –

Respuesta

205

% w cita como comillas simples '' (sin interpolación variable, menos secuencias de escape), mientras que% W cita como comillas dobles "".

irb(main):001:0> foo="hello" 
=> "hello" 
irb(main):002:0> %W(foo bar baz #{foo}) 
=> ["foo", "bar", "baz", "hello"] 
irb(main):003:0> %w(foo bar baz #{foo}) 
=> ["foo", "bar", "baz", "\#{foo}"] 
+0

Su ejemplo muestra comillas dobles para% w también. ¿Es correcto? – Foton

+0

Sí. Al imprimir el resultado, Ruby siempre usa comillas dobles y escapa caracteres como '#'. ''# {foo}'' y '" \ # {foo} "' te dan la misma cadena, que puedes verificar con ''# {foo}' ==" \ # {foo} "' en 'irb' . –

+0

Es un poco confuso al primero ver, pero gracias por la explicación. – Foton

19

% W realiza sustituciones de comillas dobles normales. % w no.

26

Una aplicación que he encontrado para W% vs% w:

greetings = %W(hi hello #{"how do you do"}) 
# => ["hi", "hello", "how do you do"] 
+0

Perfecto truco, gracias! – akuhn

+9

Aunque en este caso, es mucho más fácil hacer 'greetings =% w (hola hola cómo \ do \ you \ do)' – dinjas

10

Aunque una entrada antigua, la cuestión sigue viniendo y las respuestas no siempre parece claro para mí. Entonces, aquí están mis pensamientos.

% w y% W son ejemplos de Entrada delimitada general tipos, que se relacionan con matrices. Hay otros tipos que incluyen% q,% Q,% r,% x y% i.

La diferencia entre mayúsculas y minúsculas es que nos da acceso a las características de las comillas simple y doble. Con comillas simples y minúsculas% w, no tenemos interpolación de código (por ejemplo, # {algúnCódigo}) y un rango limitado de caracteres de escape que funcionan (por ejemplo, \, \ n). Con comillas dobles y mayúsculas% W, haga tenga acceso a estas características.

El delimitador utilizado puede ser cualquier carácter, no solo el paréntesis abierto. Juega con los ejemplos de arriba para ver eso en efecto.

para un total de escribir con ejemplos de% p y la lista completa, escapar caracteres y delimitadores - echar un vistazo a: http://cyreath.blogspot.com/2014/05/ruby-w-vs-w-secrets-revealed.html

Marcos

1

%W se utiliza para elementos de matriz de comillas dobles como %Q, por ejemplo,

foo = "!" 
%W{hello world #{foo}} # => ["hello", "world", "!"] 

%w se utiliza para elementos de matriz de una sola cita como %q.

%w(hello world #{foo}) 
# => ["hello","world", "\#{foo}"]