2012-08-28 15 views
62

Biraz tıkanıklık hissediyor. Daha aptalca bir yolu var mı?Ruby'de bir dizi oluşturmak veya eklemek için Ruby

+10

Bu ** olduğunu ** deyimsel yol. Bunu tek satır olarak yapabilirsiniz (foo || = []) <<: element', ama ben çirkin buluyorum. –

+3

IMO'nun uygun yolu başlangıç ​​değerlerine sahip olmaktır. Aynı yöntemde aynı değişken için || = ve << varsa, IMO'nuz bir kod kokusuna sahip olur ve zaten yanlış bir şey yapmış olursunuz. Nasıl yapılacağını sorma || = << güzelce sadece gerçek problemi düzeltmek yerine kozmetik yapıyor. – apeiros

cevap

103
(foo ||= []) << :element 

Ama meh. Okumak için gerçekten çok mu zor?

+31

+1 için "Bunu okunabilir tutmak gerçekten çok mu zor?" Okunabilirlik kraldır. –

+0

Eğer 'foo', değerlere baktığınız (iç içe) bir karma gibi daha karmaşık bir ifade ise, bu, değerleri bir defaya bakmaktan veya bakılan dizi değeri için başka bir değişken harcamamaktan hoşlanır. – sschuberth

49

İtme yöntemini her zaman herhangi bir dizide de kullanabilirsiniz. Daha çok beğendim.

(a ||= []).push(:element) 
2

Ayrıca gibi Kernel#Array yararlanabilecek:

gibi, potansiyel bir dizi düzleştirme yararı vardır
# foo = nil 
foo = Array(foo).push(:element) 
# => [:element] 

:

# foo = [1] 
foo = Array(foo).push(:element) 
# => [1, :element] 
İlgili konular