Enumerable#findにProcオブジェクト等々を渡して一致ナシの場合を楽に実装する

Enumerable#findにProcオブジェクトを渡してあげると、一致ナシの場合呼び出してくれます。

実際のところ

findの引数にcallをもつオブジェクト……Procクラスとかlambdaとかを渡せばよいです。

(1..10).to_a.find( Proc.new { :none } ) {|i| i > 11}
#=> :none

(1..10).to_a.find( ->{0} ) {|i| i > 11}
#=> 0

一致があれば、ちゃんと想定通り最初に一致した要素を吐き出します。

(1..10).to_a.find( ->{0} ) {|i| i > 2}
#=> 3

再帰を書くときには特に使えそうですね。