Ruby - zarif bir dizi değişken bir dizi değil zaten dönüştürmek
Bir dizi göz önüne alındığında, tek bir öğe, ya da nil, bir dizi elde - son iki eleman tek bir dizi olması ve boş bir dizi olmuştur.
Ben Ruby bu şekilde işe yarayacağını yanlışlıkla 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 ne olduğunu:
[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 benim yapabileceğim başka bir yöntem kullanmanız gerekir, ya da meta benim için bir seçenek değildir kullanacağım tüm sınıflar - to_a yöntemi değiştirerek ya da program.
Bir Yöntem:
result = nums.class == "Array".constantize ? nums : (nums.class == "NilClass".constantize ? [] : ([]<<nums))
Sorun biraz karışık bir durum. Bunu yapmanın daha zarif bir yolu var mı? (Eğer bu sorunu çözmek için Ruby-ish yolu ise çok memnun olurdum)
Ne bu uygulamalar var mı? Neden bir dizi dönüştürmek bile?
Raylar' ActiveRecord,, user.posts ki arama ya da mesajların bir dizi, tek bir post dönmek, ya da sıfır olacak. Bu sonuçları üzerinde çalışma yöntemlerini yazarken, en kolay yöntem sıfır, bir veya birçok unsuru olabilecek bir dizi alacak varsayalım. Örnek yöntem:
current_user.posts.inject(true) {|result, element| result and (element.some_boolean_condition)}
CEVAP
[*foo] Array(foo) çoğu zaman çalışır, ama karma gibi bazı durumlarda, bozar.
Array([1, 2, 3]) # => [1, 2, 3]
Array(1) # => [1]
Array(nil) # => []
Array({a: 1, b: 2}) # => [[:a, 1], [:b, 2]]
[*[1, 2, 3]] # => [1, 2, 3]
[*1] # => [1]
[*nil] # => []
[*{a: 1, b: 2}] # => [[:a, 1], [:b, 2]]
Hatta karma için çalışan düşünebildiğim tek yol bir yöntem tanımlamaktır.
class Object; def ensure_array; [self] end end
class Array; def ensure_array; to_a end end
class NilClass; def ensure_array; to_a end end
[1, 2, 3].ensure_array # => [1, 2, 3]
1.ensure_array # => [1]
nil.ensure_array # => []
{a: 1, b: 2}.ensure_array # => [{a: 1, b: 2}]

Ruby basit / zarif bir ÅŸekilde eÄŸer be...
Nasıl Ruby başka bir dizi için bir diz...
Ruby bir karma için bir dizi dönüştürm...
PHP bir Dizi Bağımsız değişken olarak ...
Ruby: %w(dizi) ne demek?...