2008-11-28 19 views
11

Değişken sayıda yayınları bir verime nasıl iletebilirim. Bir diziyi (aşağıdaki kodun yaptığı gibi) iletmek istemiyorum, aslında bunları bloğa programlı sayıda yayın olarak iletmek istiyorum.Ruby'de üretime geçmek için program aracılığıyla nasıl geçiş yapabilirim?

def each_with_attributes(attributes, &block) 
    results[:matches].each_with_index do |match, index| 
    yield self[index], attributes.collect { |attribute| (match[:attributes][attribute] || match[:attributes]["@#{attribute}"]) } 
    end 
end 

cevap

13

argümanlar haline dizi çevirmek uyarısı-operatörünü * kullanın.

block.call(*array) 

veya

yield *array 
2

Asterisk yakut bireysel argümanları bir dizi genişleyecektir:

def test(a, b) 
    puts "#{a} + #{b} = #{a + b}" 
end 

args = [1, 2] 

test *args 
3

bir argüman listesindeki tek tek bileşenlerine bir dizi genişletmek için yıldız işareti kullanın:

def print_num_args(*a) 
    puts a.size 
end 

array = [1, 2, 3] 
print_num_args(array); 
print_num_args(*array); 

yazdırmak Will: In

1 
3 

ilk durumda dizi geçirilir, İkinci durumda, her eleman ayrı ayrı geçirilir. Çağrılan işlevin, print_num_args gibi değişken bağımsız değişkenleri işlemesi gerektiğine, sabit boyutlu bir bağımsız değişken listesi beklediğine ve beklenenden daha fazla veya daha az alınıyorsa bir istisna alacağına dikkat edin.

İlgili konular