如果block_given怎么办?返回false?

时间:2017-03-26 13:25:53

标签: ruby

我有这段代码,我想为它编写一个测试。 它是开源项目的一部分,所以我不是那个写它的人。 我知道|c| yield c if block_given?将执行给定的块(如果是),但如果不是block_given?将返回false。在那种情况下会发生什么?谢谢你的时间。

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

1 个答案:

答案 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