2012-01-11 17 views
148

Mi piace questa espressione letterale di un array di stringhe:C'è una notazione letterale per una serie di simboli?

%w(i can easily create arrays of words) 

Mi chiedo se c'è un letterale di ottenere una serie di simboli. So che posso fare

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

ma sarebbe così meraviglioso solo usare un letterale.

+0

Questo approccio sarebbe più bello di solo la creazione di una serie di simboli? O un metodo semplice? Meh. –

+0

in questo caso, qual è il punto anche per la notazione '% w'? –

+0

IMO un array di simboli è meno ingombrante di un array di stringhe e generalmente meno comune. YMMV. –

risposta

246

Sì! Questo è possibile ora in Ruby 2.0.0. Un modo di scrivere è:

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

È possibile utilizzare anche altri delimitatori, così si potrebbe anche scrivere %i(foo bar) o %i!foo bar! per esempio.

Questa caratteristica è stato originariamente annunciato qui:

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

E 'citato 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 risposta accettata precedente, ma accetterò il tuo per i posteri. –

+3

Si noti che, come con altri modificatori, è possibile utilizzare un intervallo di altri delimitatori. per 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, controlla [il mio file .tmLanguage modificato in questo elenco] (https://gist.github.com/kreeger/9584625). –

24

In Ruby 1.x, purtroppo l'elenco dei disponibili %-delimiters è 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 
+0

peccato ... grazie per il link e l'elenco, però. non sapevo '% x', sembra più leggibile della notazione degli apici inverso io uso –

+3

beh, non così sfortunato per quelli che riescono a malapena a mantenere quelli esistenti nella loro testa (che sarei io). – tokland

+26

In Ruby 2.0 otterremo% i per gli array di simboli, vedere: http://www.ruby-lang.org/zh_TW/news/2012/11/02/ruby-2-0-0-preview1-released/ –

Problemi correlati