在 Ruby(尤其是 Rails)中,您经常必须检查是否存在某些内容,然后对其执行操作,例如:
if @objects.any?
puts "We have these objects:"
@objects.each { |o| puts "hello: #{o}"
end
这是尽可能短的,一切都很好,但是如果你有@objects.some_association.something.hit_database.process
而不是@objects
呢?我将不得不在if
表达式中第二次重复它,如果我不知道实现细节并且方法调用很昂贵怎么办?
显而易见的选择是创建一个变量,然后对其进行测试,然后对其进行处理,但是你必须想出一个变量名(呃),它也会在内存中徘徊,直到作用域结束。
为什么不这样:
@objects.some_association.something.hit_database.process.with :any? do |objects|
puts "We have these objects:"
objects.each { ... }
end
你会怎么做?