2009-11-14 10 views
17

This questionは、オプションの引数をRubyブロックに渡します。私はそれがデフォルト値で引数を定義することも可能で、その構文がどうなるのだろうかと思います。一見Rubyでデフォルトの引数を持つブロックを定義することはできますか?

、答えが "ノー" であることが表示されます:

def call_it &block 
    block.call 
end 

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

...結果に:

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 
    ^

答えて

28

ルビー1.9がこれを許可します。

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

...私はなぜ1.8.7で動作していないのですか? : - \ –

17

貧乏人のデフォルトのブロック引数:

def call_it &block 
    block.call 
end 

call_it do |*args| 
    x = args[0] || "foo" 
    p "Called the block with value #{x}" 
end 
関連する問題