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を持っているかどうかを使う、と。