2009-11-14 16 views
17

This question, Ruby bloğuna iletilen isteğe bağlı argümanlar ile ilgilenir. Argümanları varsayılan değerlerle tanımlamanın da mümkün olup olmadığını ve bunun için sözdiziminin ne olacağını merak ediyorum. İlk bakıştaRuby'de varsayılan argümanlarla bir blok tanımlamak mümkün mü?

, cevap "hayır" olduğu görünmektedir: içinde

def call_it &block 
    block.call 
end 

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

... sonuç:

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

cevap

28

yakut 1.9 Bu veriyor Zayıf erkeğin varsayılan blok bağımsız değişkenleri:

def call_it &block 
    block.call 
end 

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

... ve neden benim için çalışmadığını açıklayan 1.8.7'deyim. : - \ –

17

:

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 
    ^
İlgili konular