Conjuntos de rubíes:% w vs% W


152

¿Cuál es la diferencia?


18
"% w" es mi respuesta habitual a las personas que se vuelven demasiado arrogantes sobre la legibilidad de Ruby. Funciona todo el tiempo.
Craig Stuntz

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

66
Como nota al margen irrelevante, la URL de esta pregunta me confundió durante un tiempo mientras se cargaba la página.
Financia la demanda de Mónica el

Respuestas:


233

% w se cita como comillas simples ''(sin interpolación variable, menos secuencias de escape), mientras que% W se 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}"]

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

Si. Al imprimir la salida, Ruby siempre usa comillas dobles y escapa caracteres como #. '#{foo}'y "\#{foo}"darle la misma cadena, que puede verificar con '#{foo}' == "\#{foo}"en irb.
Brian Campbell

Es un poco confuso a primera vista, pero gracias por la explicación.
Foton

29

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

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

12
Aunque en este caso, es probablemente más fácil hacerlogreetings = %w(hi hello how\ do\ you\ do)
dinjas

21

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


11

Aunque es una publicación antigua, la pregunta sigue apareciendo y las respuestas no siempre me parecen claras. Entonces, aquí están mis pensamientos.

% w y% W son ejemplos de tipos de entrada delimitados generales , 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 comillas simples y dobles. Con comillas simples y minúsculas% w, no tenemos interpolación de código (por ejemplo, # {someCode}) y un rango limitado de caracteres de escape que funcionan (por ejemplo, \, \ n). Con comillas dobles y mayúsculas% W que 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 de% w y la lista completa, caracteres de escape y delimitadores, eche un vistazo a: http://cyreath.blogspot.com/2014/05/ruby-w-vs-w-secrets-revealed .html

marca


1
Ese es un buen artículo. No me di cuenta de que puedes hacer cadenas u otras cosas de la misma manera y los caracteres que encierran pueden ser lo que quieras. Por ejemplo,%w&readable af&
Dex


1

%Wse usa para elementos de matriz con comillas dobles como %Q, por ejemplo,

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

%wse usa para elementos de matriz con comillas simples como %q.

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

0
array = %w(a b c d) 

Igual que

array = ["a", "b", "c", "d"]

%w es un símbolo de atajo para la comilla a la cadena!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.