Matrici ruby:% w vs% W


152

Qual è la differenza?


18
"% w" è la mia solita replica alle persone che diventano un po 'troppo arroganti sulla leggibilità di Ruby. Funziona ogni volta.
Craig Stuntz,

ora hai una risposta ancora migliore :-)
errata

6
Come nota a margine irrilevante, l'URL di questa domanda mi ha confuso per un po 'mentre la pagina veniva caricata.
Fondo Monica's Lawsuit,

Risposte:


233

Le virgolette% w come virgolette singole ''(nessuna interpolazione variabile, meno sequenze di escape), mentre le virgolette% W come virgolette doppie "".

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}"]

Il tuo esempio mostra virgolette doppie anche per% w. È corretto?
Foton,

Sì. Quando stampa l'output, Ruby usa sempre virgolette doppie e sfugge a caratteri simili #. '#{foo}'e "\#{foo}"ti dà la stessa stringa, che puoi verificare con '#{foo}' == "\#{foo}"in irb.
Brian Campbell,

È un po 'confuso a prima vista, ma grazie per la spiegazione.
Foton,

29

Un'applicazione che ho trovato per% W vs% w:

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

12
Anche se in questo caso, è probabilmente più semplice farlogreetings = %w(hi hello how\ do\ you\ do)
dinjas

21

% W esegue normali sostituzioni di virgolette doppie. % w no.


11

Sebbene sia un vecchio post, la domanda continua a sorgere e le risposte non mi sembrano sempre chiare. Quindi, ecco i miei pensieri.

% w e% W sono esempi di tipi di input delimitati generali relativi alle matrici. Esistono altri tipi che includono% q,% Q,% r,% xe% i.

La differenza tra maiuscole e minuscole è che ci consente di accedere alle funzionalità di virgoletta singola e doppia. Con virgolette singole e% w minuscola, non abbiamo interpolazione di codice (ad esempio # {someCode}) e un intervallo limitato di caratteri di escape che funzionano (ad esempio \, \ n). Con doppie virgolette e% W maiuscola lo facciamo abbiamo accesso a queste funzionalità.

Il delimitatore utilizzato può essere qualsiasi carattere, non solo la parentesi aperta. Gioca con gli esempi sopra per vederlo in effetti.

Per un resoconto completo con esempi di% w e l'elenco completo, caratteri di escape e delimitatori - dai un'occhiata a: http://cyreath.blogspot.com/2014/05/ruby-w-vs-w-secrets-revealed .html

marchio


1
Questo è un buon articolo. Non mi rendevo conto che puoi creare stringhe o altre cose allo stesso modo e i personaggi racchiusi possono essere quello che vuoi. Ad esempio,%w&readable af&
Dex,


1

%Wviene utilizzato per elementi di array tra virgolette come %Q, ad esempio,

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

%wviene utilizzato per elementi di array a virgoletta singola come %q.

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

0
array = %w(a b c d) 

Uguale a

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

%w è un simbolo di scelta rapida per le virgolette della stringa!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.