flattenせずに配列探索

配列をflattenせずに再帰的に探索するメソッドを書いてみました。でもあまり格好良くありません。

a = [ 1, 2, 3, [4, 5, 6], [7, [8, 9, 10]]]

class Array
  def recurse_find(x)
    self.each do |item|
      if item == x
        return true
      elsif item.is_a?(Enumerable)
        if item.recurse_find(x)
          return true
        end
      end
    end
    return false
  end
end

p a.recurse_find(8) #=> true

追記:
is_a?ではなくrespond_to?を使った解法トラックバックしていただきました。
なるほど、Object#respond_to?を使うと、メソッドを持っているかどうかがわかるのですね。で、recurse_findを持っているかどうかを使う、と。