Crea una serie di simboli


130

C'è un modo più pulito di fare qualcosa del genere?

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

Avrei pensato %sche avrei fatto quello che volevo, ma non è così. Prende tutto tra le parentesi e ne ricava un grande simbolo.

Solo un piccolo fastidio.


1
È piuttosto standard. C'è qualcosa nella tua implementazione che rende indesiderabile questo metodo?
dwhalen,

5
Non "veramente", ma Rails ha spesso uno zucchero sintattico come questo che mi fa sentire tutto caldo dentro usando. :)
Ha

da ruby ​​2, c'è! vedi stackoverflow.com/questions/8816877/...
m_x

Risposte:


357

La risposta originale fu scritta nel settembre '11, ma, a partire da Ruby 2.0 , c'è un modo più breve per creare una serie di simboli! Questo letterale:

%i[address city state postal country]

farà esattamente quello che vuoi.


3
Ho sempre dimenticato che sta per "stagista" un'alternativa a "to_sym". Vedi codecademy.com/forum_questions/512a675cf116c52d0d00674b
A5308Y

Nota l'enfasi di ruby ​​2. Questo non è mostrato nel libro Ruby Programming Language perché copre solo fino a 1.9.3.
Donato,

Quando utilizzo la sintassi% letterale di ruby, preferisco usare due caratteri non alfanumerici al posto delle parentesi, cioè%i|a b c|
Epigene

6
Mentre questo fa quello che vuoi, chiunque lo veda nella tua base di codice dovrà farlo a Google per capire quale sintassi bizarro ci ha lanciato Ruby questa volta. Consiglio vivamente di evitare oscure funzionalità linguistiche quando esistono alternative perfettamente leggibili, ad esempio [: indirizzo,: città,: stato].
Alex,

Grazie, è davvero utile.
sonnyhe2002,

91

Con il rischio di diventare troppo letterale, penso che il modo più pulito per costruire una matrice di simboli sia usare una matrice di simboli.

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

Non riesco a pensare a qualcosa di più conciso di così.


11
Vuoi dire "troppo letterale"?
Andrew Grimm,

Mi piace sempre trovare e usare i modi più potenti e concisi per fare le cose. Questa risposta è in realtà meno battute del mio per questo particolare elenco ma con un elenco di ~ 9 o più elementi, un'alternativa sarebbe più breve. Grazie per la risposta. :)
Ha

4
Penso che la leggibilità superi tutto in questo caso. Questa risposta è MOLTO più leggibile (IMO) rispetto all'alternativa% w / to_sym. Non fare in modo che il prossimo sviluppatore che prenda il controllo delle tue cose desideri colpirti in gola.
Bruce Hubbard,

3

%i[ ] Matrice di simboli non interpolata, separata da spazi bianchi (dopo Ruby 2.0)

%I[ ] Matrice interpolata di simboli, separata da spazi bianchi (dopo Ruby 2.0)

%i[address city state postal country]

il modo più pulito per farlo è:

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.