2016-05-15 8 views
1

メソッドは、Ruby yield文を使用して、関連するコードブロックを1回以上呼び出すことができます。垂直バー(|)で出力するパラメータを与えることによって、ブロックに値を渡すこともできます。ちょうど私が下で行ったように。Ruby - それぞれIteratorで "yield"を処理する

`print_name': no block given (yield) (LocalJumpError) 

これは、我々はメソッドの呼び出し中に、コードのブロックを通過することなく方法で歩留まりを使用することはできません。私のコードの行番号11で

1 def print_name 
    2 puts "Hello " 
    3 yield "Vikram" 
    4 end 
    5 
    6 animals = %w(ant bee cat dog elk) 
    7 animals.each {|animal| puts animal } 
    8 animals.each 
    9 
10 print_name {|name| puts name} 
11 print_name 

はというエラーを与えています。

ruby​​の "e​​ach"メソッドの中に "yield"ステートメントがある場合、私の上記のコード "animals.each"(8行目を参照)がエラーを出すことなく動作していますか?

それは、その後

animals.each {|animal| puts animal } 

存在しない場合、これは働いていないはず。

答えて

4

Rubyでは、ブロックが現在のメソッドに渡されたかどうかをKernel#block_given?で確認できます。 Array#eachは、ブロックが指定されていない場合(block_given?を使用してチェックされている)、列挙子を返します。

eachとは異なり、あなたのprint_name方法は、ライン11

上のエラーにつながる、関係なく、ブロックが与えられたかどうかの yieldにしよう
関連する問題