2017-03-26 4 views
0

私はこのコードを持っています。私はそれをテストしたいと思います。 それはオープンソースプロジェクトの一部なので、私はそれを書いた人ではありませんでした。 |c| yield c if block_given?は与えられたブロックを実行しますが、そうでない場合はblock_given?falseを返します。その場合はどうなりますか?あなたの時間をありがとう。block_givenの場合はどうなりますか?偽を返しますか?

::CSV 
.open(path, 'rb', opts) 
.tap { |c| yield c if block_given? } 
.to_a 

答えて

1

最も簡単な方法は、それをチェックすることです:)

def block 
    (1..10)    .tap {|x| puts "original: #{x.inspect}"} 
    .select {|x| x%2==0} .tap {|x| yield x if block_given?} 
end 
block { |x| puts "evens: #{x.inspect}"} 
block 

最初の呼び出しが戻る:

=> original: 1..10 
=> evens: [2, 4, 6, 8, 10] 

第二コール・リターン:

=> original: 1..10 

ブロックがない場合与えられた歩留まりは呼び出されないので、空のブロックは#tapに渡されます。

+1

'&block'変数を省略できます。 –

+0

ありがとう、それは私が欲しかったものです。 –

関連する問題