我有这段代码,我想为它编写一个测试。
它是开源项目的一部分,所以我不是那个写它的人。
我知道|c| yield c if block_given?
将执行给定的块(如果是),但如果不是block_given?
将返回false
。在那种情况下会发生什么?谢谢你的时间。
::CSV
.open(path, 'rb', opts)
.tap { |c| yield c if block_given? }
.to_a
答案 0 :(得分: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
如果没有给定块,则不会调用yield,所以空块将传递给#tap
。