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
再帰を書くときには特に使えそうですね。