2008-11-28 2 views
11

Wie kann ich eine variable Anzahl von Argumenten zu einer Ausbeute übergeben. Ich möchte kein Array übergeben (wie der folgende Code), ich würde sie gerne als programmatische Anzahl von Argumenten an den Block übergeben.Wie kann ich programmgesteuert Argumente übergeben, um in Ruby zu liefern?

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 

Antwort

13

Mit dem Splat-Operator * das Array in Argumente drehen.

block.call(*array) 

oder

yield *array 
2

Asterisk ein Array auf einzelne Argumente in rubin Erweitern:

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

args = [1, 2] 

test *args 
3

das Sternchen ein Array in seine einzelnen Komponenten in einer Argumentliste erweitern:

def print_num_args(*a) 
    puts a.size 
end 

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

Wird drucken:

1 
3 

In der ersten Fall wird das Array übergeben, im zweiten Fall wird jedes Element separat übergeben. Beachten Sie, dass die aufgerufene Funktion Variablenargumente wie print_num_args verarbeiten muss. Wenn sie eine Argumentliste mit fester Größe erwartet und mehr oder weniger als erwartet empfangen wird, erhalten Sie eine Ausnahme.

Verwandte Themen