Qual è la differenza?Matrici di Ruby:% w vs% W
risposta
% w cita come virgolette singole ''
(nessuna interpolazione variabile, meno sequenze di escape), mentre% W cita come virgolette ""
.
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}"]
L'esempio mostra virgolette per% w. È corretto? – Foton
Sì. Quando stampi l'output, Ruby usa sempre virgolette doppie e caratteri di escape come '#'. ''# {foo}'' e '" \ # {pippo} "' ti danno la stessa stringa, che puoi verificare con ''# {pippo}' ==" \ # {pippo} "' in 'irb' . –
È un po 'di confusione al primo sguardo, ma grazie per la spiegazione. – Foton
% W esegue le normali sostituzioni con doppia virgola. % w no.
Anche se un vecchio post, la questione continuano ad arrivare e le risposte non sembrano sempre chiaro per me. Quindi, ecco i miei pensieri.
% w e% W sono esempi di input delimitato generico tipi, relativi agli array. Esistono altri tipi che includono% q,% Q,% r,% x e% i.
La differenza tra lettere maiuscole e minuscole è che ci consente di accedere alle funzioni di virgolette singole e doppie. Con virgolette singole e minuscole% w, non abbiamo alcuna interpolazione del codice (ad es. # {SomeCode}) e un intervallo limitato di caratteri di escape che funzionano (ad es. \, \ N). Con doppie virgolette e maiuscole% W abbiamo do avere accesso a queste funzionalità.
Il delimitatore utilizzato può essere qualsiasi carattere, non solo la parentesi aperta. Gioca con gli esempi sopra per vederlo in effetto.
per un pieno di scrivere con esempi di% W e l'elenco completo, caratteri di escape e delimitatori - hanno un'occhiata a: http://cyreath.blogspot.com/2014/05/ruby-w-vs-w-secrets-revealed.html
Mark
Documentazione per archi in percentuale: http://ruby-doc.org/core-2.2.0/doc/syntax/literals_rdoc.html#label-Percent+Strings
%W
viene utilizzato per elementi di array a virgola doppia come %Q
, ad esempio,
foo = "!"
%W{hello world #{foo}} # => ["hello", "world", "!"]
%w
viene utilizzato per elementi di array con virgolette singole come %q
.
%w(hello world #{foo})
# => ["hello","world", "\#{foo}"]
"% w" è la mia solita risposta a persone che si agitano un po 'troppo sulla leggibilità di Ruby. Funziona sempre. –
ora hai una risposta ancora migliore :-) – errata
Come nota a margine irrilevante, l'URL per questa domanda mi ha confuso per un po 'mentre la pagina si stava caricando. –