Conjuntos de rubíes:% w vs% W

152

¿Cuál es la diferencia?

Allyn
fuente
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}"]
Brian Campbell
fuente
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"]
aaandre
fuente
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.

Brian
fuente
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

Mark C
fuente
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}"]
Faruk Hossen
fuente
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!

Kasem007
fuente