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
これをどのように行いますか?