web-dev-qa-db-fra.com

Existe-t-il une notation littérale pour un tableau de symboles?

J'aime cette expression littérale pour un tableau de chaînes:

%w( i can easily create arrays of words )

Je me demande s’il existe un littéral pour obtenir un tableau de symboles. Je sais que je peux faire

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

mais ce serait si merveilleux juste d'utiliser un littéral.

164
m_x

Oui! C'est possible maintenant dans Ruby 2.0.0. Une façon de l'écrire est:

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

Vous pouvez également utiliser d'autres délimiteurs, vous pouvez ainsi écrire %i(foo bar) ou %i!foo bar! Par exemple.

Cette fonctionnalité a été initialement annoncée ici:

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

Il est mentionné dans la documentation officielle de Ruby ici:

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

268
David Grayson

Dans Ruby 1.x, malheureusement, la liste des % - délimiteurs disponibles est limitée

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
25
Gareth