Buat berbagai simbol


130

Apakah ada cara yang lebih bersih untuk melakukan hal seperti ini?

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

Saya akan mengira %sakan melakukan apa yang saya inginkan, tetapi ternyata tidak. Hanya mengambil segala sesuatu di antara kurung dan membuat satu simbol besar dari itu.

Hanya gangguan kecil.


1
Itu cukup standar. Adakah sesuatu tentang implementasi Anda yang membuat metode ini tidak diinginkan?
dwhalen

5
Bukan "benar-benar" tetapi Rails sering memiliki gula sintaksis seperti ini yang membuat saya merasa hangat di dalam dengan menggunakan. :)
Drew

sejak ruby ​​2, ada! lihat stackoverflow.com/questions/8816877/…
m_x

Jawaban:


357

Jawaban aslinya ditulis kembali pada bulan September '11, tetapi, mulai dari Ruby 2.0 , ada cara yang lebih pendek untuk membuat array simbol! Literal ini:

%i[address city state postal country]

akan melakukan apa yang Anda inginkan.


3
Saya selalu lupa bahwa itu singkatan dari "magang" alternatif untuk "to_sym". Lihat codecademy.com/forum_questions/512a675cf116c52d0d00674b
A5308Y

Perhatikan penekanan ruby ​​2. Ini tidak ditampilkan dalam buku Bahasa Pemrograman Ruby karena itu hanya mencakup hingga 1.9.3.
Donato

Saat menggunakan sintaks% literal ruby ​​saya lebih suka menggunakan dua karakter non-alfanumerik sebagai pengganti tanda kurung, yaitu%i|a b c|
Epigene

6
Sementara ini melakukan apa yang Anda inginkan, siapa pun yang melihat ini di basis kode Anda harus Google untuk mencari tahu apa sintaksis bizarro yang telah dilemparkan Ruby kepada kami saat ini. Saya sangat merekomendasikan menghindari fitur bahasa yang tidak jelas ketika ada alternatif yang dapat dibaca dengan sempurna, yaitu [: alamat,: kota,: negara].
Alex

Terima kasih ini sangat membantu.
sonnyhe2002

91

Dengan risiko menjadi terlalu literal, saya pikir cara paling bersih untuk membangun array simbol menggunakan array simbol.

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

Tidak bisa memikirkan sesuatu yang lebih ringkas dari itu.


11
Apakah maksud Anda "terlalu harfiah"?
Andrew Grimm

Saya selalu suka menemukan dan menggunakan cara-cara paling kuat dan ringkas dalam melakukan sesuatu. Jawaban ini sebenarnya kurang penekanan tombol dari saya untuk daftar khusus ini tetapi dengan daftar ~ 9 atau lebih item, alternatif akan lebih pendek. Terima kasih atas jawabannya. :)
Drew

4
Saya pikir keterbacaan mengalahkan semua dalam hal ini. Jawaban ini jauh lebih mudah dibaca (IMO) daripada alternatif% w / to_sym. Jangan membuat pengembang berikutnya untuk mengambil alih barang-barang Anda yang ingin meninju Anda.
Bruce Hubbard

3

%i[ ] Array simbol yang tidak diinterpolasi, dipisahkan oleh spasi putih (setelah Ruby 2.0)

%I[ ] Array simbol yang diinterpolasi, dipisahkan oleh spasi putih (setelah Ruby 2.0)

%i[address city state postal country]

cara terbersih untuk melakukan ini adalah:

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.