Esiste una notazione letterale per una serie di simboli?


170

Mi piace questa espressione letterale per una serie di stringhe:

%w( i can easily create arrays of words )

Mi chiedo se esiste un letterale per ottenere una serie di simboli. So di poterlo fare

%w( it is less elegant to create arrays of symbols ).map( &:to_sym )

ma sarebbe meraviglioso usare solo un letterale.


Questo approccio sarebbe più bello della semplice creazione di una serie di simboli? O un metodo semplice? Meh.
Dave Newton,

in questo caso, qual è il punto della %wnotazione?
m_x,

IMO una matrice di simboli è già meno ingombra di una matrice di stringhe e generalmente meno comune. YMMV.
Dave Newton,

<troll> sembra che il team di ruby ​​sia d'accordo con me dal ruby ​​2 ... </troll>
m_x

3
Possibile duplicato di Crea array di simboli
sjakobi,

Risposte:


277

Sì! Questo è ora possibile in Ruby 2.0.0. Un modo per scriverlo è:

%i{foo bar}  # => [:foo, :bar]

Puoi anche usare altri delimitatori, così puoi anche scrivere %i(foo bar)o %i!foo bar!per esempio.

Questa funzione è stata originariamente annunciata qui:

http://www.ruby-lang.org/zh_TW/news/2012/11/02/ruby-2-0-0-preview1-released/

È menzionato nella documentazione ufficiale di Ruby qui:

http://ruby-doc.org/core/doc/syntax/literals_rdoc.html#label-Percent+Strings


3
grazie, @ MarcelJackwerth lo ha già dichiarato in un commento sulla precedente risposta accettata, ma accetterò la tua per i posteri.
m_x,

3
Si noti che come con altri modificatori, è possibile utilizzare una gamma di altri delimitatori. ad esempio %i[foo bar], %i{foo bar}, %i!foo bar!, %i%foo bar%.
user664833

1
Se desideri evidenziare il supporto per questo in TextMate o Sublime Text, dai un'occhiata al mio file .tmLanguage modificato in questa sintesi .
Ben Kreeger,

1
secondo rubocop , si consiglia di utilizzare%i[foo bar]
Mapad,

26

In Ruby 1.x, purtroppo l'elenco dei % -delimiters disponibili è limitato

Modifier    Meaning
%q[ ]       Non-interpolated String (except for \\ \[ and \])
%Q[ ]       Interpolated String (default)
%r[ ]       Interpolated Regexp (flags can appear after the closing delimiter)
%s[ ]       Non-interpolated Symbol
%w[ ]       Non-interpolated Array of words, separated by whitespace
%W[ ]       Interpolated Array of words, separated by whitespace
%x[ ]       Interpolated shell command

peccato ... grazie per il link e l'elenco, però. non lo sapevo %x, sembra più leggibile della notazione
backticks che

3
beh, non così sfortunato per coloro che riescono a malapena a tenere in mente quelli esistenti (quello sarei io).
tokland

26
In Ruby 2.0 otterremo% i per array di simboli, vedere: ruby-lang.org/zh_TW/news/2012/11/02/…
Marcel Jackwerth,
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.