2009-11-14 4 views
17

This question behandelt optionale Argumente, die an einen Ruby-Block übergeben werden. Ich frage mich, ob es auch möglich ist, Argumente mit Standardwerten zu definieren, und wie die Syntax dafür aussehen würde.Ist es möglich, einen Block mit Standardargumenten in Ruby zu definieren?

Auf den ersten Blick scheint es, dass die Antwort "nein":

def call_it &block 
    block.call 
end 

call_it do |x = "foo"| 
    p "Called the block with value #{x}" 
end 

... Ergebnisse in:

my_test.rb:5: syntax error, unexpected '=', expecting '|' 
    call_it do |x = "foo"| 
       ^
my_test.rb:6: syntax error, unexpected tSTRING_BEG, expecting kDO or '{' or '(' 
     p "Called the block with value #{x}" 
     ^
my_test.rb:7: syntax error, unexpected kEND, expecting $end 
    end 
    ^

Antwort

28

Rubin 1.9 ermöglicht dies:

{|a,b=1| ... } 
+2

... und ich bin auf 1.8.7, was erklärt, warum es für mich nicht funktioniert. : - \ –

17

Standard-Blockargumente von Poor-man:

def call_it &block 
    block.call 
end 

call_it do |*args| 
    x = args[0] || "foo" 
    p "Called the block with value #{x}" 
end 
Verwandte Themen