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.


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


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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.