Bir dizi, tek bir eleman veya nil verildiğinde, bir dizi elde edin - son ikisi sırasıyla tek eleman dizisi ve boş bir dizidir.
Yanlışlıkla Ruby'nin şu şekilde çalışacağını düşündüm:
[1,2,3].to_a #= [1,2,3] # Already an array, so no change
1.to_a #= [1] # Creates an array and adds element
nil.to_a #= [] # Creates empty array
Ama gerçekten aldığınız şey:
[1,2,3].to_a #= [1,2,3] # Hooray
1.to_a #= NoMethodError # Do not want
nil.to_a #= [] # Hooray
Bu yüzden bunu çözmek için ya başka bir yöntem kullanmam gerekiyor ya da kullanmayı düşündüğüm tüm sınıfların to_a yöntemini değiştirerek meta program yapabilirim - ki bu benim için bir seçenek değil.
Yani bir Yöntem:
result = nums.class == "Array".constantize ? nums : (nums.class == "NilClass".constantize ? [] : ([]<<nums))
Sorun şu ki, biraz karışıklık. Bunu yapmanın zarif bir yolu var mı? (Bu sorunu çözmek için Ruby'ye benzeyen yol buysa şaşırırdım)
Bunun hangi uygulamaları var? Neden bir diziye dönüştürülsün ki?
Rails'in ActiveRecord'unda, demek, user.postsbir dizi gönderi, tek bir gönderi veya sıfır döndürür. Bunun sonuçları üzerinde çalışan metotları yazarken, metodun sıfır, bir veya birçok eleman içeren bir dizi alacağını varsaymak en kolayıdır. Örnek yöntem:
current_user.posts.inject(true) {|result, element| result and (element.some_boolean_condition)}
==bunun yerine demek istiyorsunuz =, değil mi?
[1,2,3].to_ayok değil dönmek [[1,2,3]]! Dönüyor [1,2,3].
user.postsasla tek bir gönderi döndürmemelidir. En azından onu hiç görmedim.