Sembol dizisi oluşturun


130

Böyle bir şeyi yapmanın daha temiz bir yolu var mı?

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

İstediğimi yapacağımı %sdüşünürdüm, ama olmadı. Parantez içindeki her şeyi alır ve ondan büyük bir sembol çıkarır.

Sadece küçük bir sıkıntı.


1
Bu oldukça standart. Uygulamanızda bu yöntemi istenmeyen kılan herhangi bir şey var mı?
dwhalen

5
"Gerçekten" değil ama Rails'de sık sık böyle sözdizimsel bir şeker var, bu da beni kullanarak içimde bir çınlama hissi uyandırıyor. :)
Drew

Ruby 2'den beri var! bakınız stackoverflow.com/questions/8816877/…
m_x

Yanıtlar:


357

Orijinal cevap Eylül '11'de yazıldı, ancak Ruby 2.0'dan başlayarak, bir dizi sembol oluşturmanın daha kısa bir yolu var! Bu gerçek:

%i[address city state postal country]

tam olarak ne istersen yapacak.


3
Her zaman "stajyer" anlamına geldiğini ve "to_sym" yerine alternatif olduğunu unutmuşumdur. Bkz codecademy.com/forum_questions/512a675cf116c52d0d00674b
A5308Y

Ruby 2'nin vurgusuna dikkat edin. Bu Ruby Programlama Dili kitabında gösterilmemiştir çünkü yalnızca 1.9.3'e kadar olan bölümü kapsar.
Donato

Ruby'nin% literal sözdizimini kullanırken, parantez yerine iki alfasayısal olmayan karakter kullanmayı tercih ederim, yani%i|a b c|
Epigene

6
Bu, istediğinizi yaparken, bunu kod tabanınızda gören herhangi biri, Ruby'nin bize bu sefer hangi tuhaf sözdizimini attığını bulmak için Google'a başvurmak zorunda kalacaktır. Tam olarak okunabilir alternatifler varken, yani [: adres,: şehir,: eyalet] gibi belirsiz dil özelliklerinden kaçınmanızı şiddetle tavsiye ederim.
Alex

Teşekkürler, bu gerçekten yardımcı oldu.
sonnyhe2002

91

Fazla gerçekçi olma riskiyle, bir dizi simge oluşturmanın en temiz yolunun bir dizi simge kullanmak olduğunu düşünüyorum.

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

Bundan daha kısa bir şey düşünemiyorum.


11
"Fazla gerçek" mi demek istiyorsun?
Andrew Grimm

Her zaman bir şeyler yapmanın en güçlü ve özlü yollarını bulmayı ve kullanmayı seviyorum. Bu cevap aslında bu belirli liste için benimkinden daha az tuş vuruşudur, ancak ~ 9 veya daha fazla öğeden oluşan bir listeyle, bir alternatif daha kısa olacaktır. Cevap için teşekkürler. :)
Drew

4
Okunabilirliğin bu durumda hepsinden üstün olduğunu düşünüyorum. Bu cevap,% w / to_sym alternatifinden ÇOK daha okunabilirdir (IMO). Bir sonraki geliştiricinin eşyalarınızı devralmasını, boğazınıza yumruk atmak istemesini sağlamayın.
Bruce Hubbard

3

%i[ ] Boşluklarla ayrılmış, enterpolasyonsuz sembol dizisi (Ruby 2.0'dan sonra)

%I[ ] Boşluklarla ayrılmış (Ruby 2.0'dan sonra) enterpolasyonlu sembol dizisi

%i[address city state postal country]

bunu yapmanın en temiz yolu:

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.