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

标签 ruby lambda

目前我有一个方法,其签名为 time_in_intervals(from,til,interval,&block),我希望能够向它传递一个返回数字计数的简单 block 产生到 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

最佳答案

这个方法是你写的吗?如果是这样,请将其定义更改为仅 yield if block_given?

否则,如果它严格需要一个 block ,您可以使用隐式 block 语法来做到这一点:

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

关于Ruby如何计算yield返回的对象数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25556508/

相关文章:

c# - .NET Framework 中的 lambda 和委托(delegate)有什么区别?

c++ - lambda 表达式的 noexcept 和空抛规范之间有什么区别吗?

ruby - 可以使用 sinatra 和 rspec 的工厂吗?

ruby - 为什么我可以使用像 `puts` 这样的内核单例方法?

c - 如何将链接目标添加到 Ruby mkmf?

ruby - 从另一个作用域中定义的 Proc 引用局部变量

java - 使用 Java8 Streams 从另外两个列表创建对象列表

c++ - 将不可复制的闭包对象传递给 std::function 参数

Mysql/Ruby Sequel最后一次插入ID值,用什么方法?

c++ - 使用 lambda/std::function 删除拥有该函数的对象