Créer un tableau de symboles


130

Existe-t-il un moyen plus propre de faire quelque chose comme ça?

%w[address city state postal country].map(&:to_sym) 
#=> [:address, :city, :state, :postal, :country]

J'aurais pensé %sque j'aurais fait ce que je voulais, mais ce n'est pas le cas. Il prend juste tout entre les crochets et en fait un grand symbole.

Juste un petit ennui.


1
C'est assez standard. Y a-t-il quelque chose dans votre implémentation qui rend cette méthode indésirable?
dwhalen

5
Pas "vraiment" mais Rails a souvent du sucre syntaxique comme celui-ci qui me fait sentir tout chaud à l'intérieur en utilisant. :)
Match

depuis ruby ​​2, il y en a! voir stackoverflow.com/questions/8816877/…
m_x

1
Possible duplication de Y a
ymoreau

Réponses:


357

La réponse originale a été écrite en septembre 2011, mais à partir de Ruby 2.0 , il existe un moyen plus court de créer un tableau de symboles! Ce littéral:

%i[address city state postal country]

fera exactement ce que vous voulez.


3
J'oublie toujours que cela signifie "intern" une alternative à "to_sym". Voir codecademy.com/forum_questions/512a675cf116c52d0d00674b
A5308Y

Notez l'emphase de ruby ​​2. Ceci n'est pas montré dans le livre Ruby Programming Language car cela ne couvre que jusqu'à 1.9.3.
Donato

Lors de l'utilisation de la syntaxe littérale% de ruby, je préfère utiliser deux caractères non alphanumériques à la place des crochets, c'est%i|a b c|
Epigene

6
Bien que cela fasse ce que vous voulez, quiconque voit cela dans votre base de code devra le rechercher sur Google pour comprendre la syntaxe bizarro que Ruby nous a lancée cette fois. Je recommande fortement d'éviter les fonctionnalités de langage obscures lorsqu'il existe des alternatives parfaitement lisibles, à savoir [: adresse,: ville,: état].
Alex

Merci, c'est vraiment utile.
sonnyhe2002

91

Avec un risque de devenir trop littéral, je pense que le moyen le plus propre de construire un tableau de symboles est d'utiliser un tableau de symboles.

fields = [:address, :city, :state, :postal, :country]

Je ne peux penser à rien de plus concis que ça.


11
Voulez-vous dire "trop ​​littéral"?
Andrew Grimm

J'aime toujours trouver et utiliser les moyens les plus puissants et les plus concis de faire les choses. Cette réponse est en fait moins de frappes que la mienne pour cette liste particulière, mais avec une liste d'environ 9 éléments ou plus, une alternative serait plus courte. Merci d'avoir répondu. :)
Tiré le

4
Je pense que la lisibilité l'emporte sur tout dans ce cas. Cette réponse est BEAUCOUP plus lisible (IMO) que l'alternative% w / to_sym. Ne faites pas en sorte que le prochain développeur qui reprenne vos affaires veuille vous frapper à la gorge.
Bruce Hubbard

3

%i[ ] Tableau non interpolé de symboles, séparés par des espaces (après Ruby 2.0)

%I[ ] Tableau interpolé de symboles, séparés par des espaces (après Ruby 2.0)

%i[address city state postal country]

la manière la plus propre de faire ceci est:

%w[address city state postal country].map(&:to_sym)

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.