通常在Ruby(特别是Rails)中,您必须检查是否存在某些内容,然后对其执行操作,例如:
if @objects.any?
puts "We have these objects:"
@objects.each { |o| puts "hello: #{o}"
end
Run Code Online (Sandbox Code Playgroud)
这是最短的,一切都很好,但如果你有@objects.some_association.something.hit_database.process而不是@objects?我必须在if表达式中第二次重复它,如果我不知道实现细节并且方法调用很昂贵怎么办?
显而易见的选择是创建一个变量,然后测试它然后处理它,但是你必须提出一个变量名(ugh),它也会在内存中挂起,直到作用域结束.
为什么不是这样的:
@objects.some_association.something.hit_database.process.with :any? do |objects|
puts "We have these objects:"
objects.each { ... }
end
Run Code Online (Sandbox Code Playgroud)
你会怎么做?
水龙头呢?
@objects.some_association.something.hit_database.process.tap do |objects|
if objects.any?
puts "We have these objects:"
objects.each { ... }
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
163 次 |
| 最近记录: |