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.