Ruby如何计算yield返回的对象数

时间:2014-08-28 19:23:58

标签: ruby lambda

目前我有一个签名为time_in_intervals(from, till, interval, &block)的方法,我希望能够传递一个简单的块,返回产生块的对象数量。

目前我的方式是这样的

我有一个声明空lambda的函数

def empty      
  -> (x) {}
end

然后我用空的lambda调用我的函数并计算它

time_in_intervals('7AM', '8PM', 60, &empty) #=> Returns array of times
time_in_intervals('7AM', '8PM', 60, &empty).count #=> 14

有没有办法做到这一点,我可以传递一个更有用的功能,然后&empty会导致返回计数而不必调用.count

1 个答案:

答案 0 :(得分:2)

你写过这个方法吗?如果是,请在yield

时将其定义更改为block_given?

否则,如果它严格要求一个块,你可以通过使用隐式块语法这样做:

(time_in_intervals('7AM', '8PM', 60) { }).count