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

170

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 tellement merveilleux d'utiliser un littéral.

m_x
la source
Cette approche serait plus agréable que la simple création d'un tableau de symboles? Ou une méthode simple? Meh.
Dave Newton du
dans ce cas, quel est même l'intérêt de la %wnotation?
m_x
OMI un tableau de symboles est déjà moins encombré qu'un tableau de chaînes, et généralement moins courant. YMMV.
Dave Newton
<troll> semble que l'équipe de ruby ​​était d'accord avec moi depuis ruby ​​2 ... </troll>
m_x
3
Double

Réponses:

277

Oui! Ceci est désormais possible 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 donc également é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

David Grayson
la source
3
merci, @ MarcelJackwerth l'a déjà déclaré dans un commentaire sur la réponse précédente acceptée, mais j'accepterai la vôtre pour la postérité.
m_x
3
Notez que comme avec les autres modificateurs, il est possible d'utiliser une plage d'autres délimiteurs. par exemple %i[foo bar], %i{foo bar}, %i!foo bar!, %i%foo bar%.
user664833
1
Si vous souhaitez mettre en évidence la prise en charge de cela dans TextMate ou Sublime Text, consultez mon fichier .tmLanguage modifié dans cet article .
Ben Kreeger
1
selon rubocop , il est conseillé d'utiliser%i[foo bar]
Mapad
26

Dans Ruby 1.x, la liste des % -delimiters disponibles est malheureusement 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
Gareth
la source
dommage ... merci pour le lien et la liste, cependant. ne savait pas %x, semble plus lisible que la notation backticks que j'utilise
m_x
3
enfin, pas si malheureux pour ceux qui peuvent à peine garder les existants dans leur tête (ce serait moi).
tokland
26
Dans Ruby 2.0, nous obtiendrons% i pour les tableaux de symboles, voir: ruby-lang.org/zh_TW/news/2012/11/02
Marcel Jackwerth