単純に、何か入っているか確認する用途にも使えますし
(1..9).map.any? #>> true
あるいは、ブロックを渡して条件が一致するメソッドがあるか調べることも可能。
(1..9).map.any?(&:odd?) #>> true
これを応用したメソッドが、例のactive_supportに実装されたEnumrable#many?メソッドです。
def many? cnt = 0 if block_given? any? do |element| cnt += 1 if yield element cnt > 1 end else any? { (cnt += 1) > 1 } end end
カウンタをもたせて、
- ブロックなしなら、要素が2個以上あるか
- ブロックありなら、ブロック中の条件が満たされる要素が2個以上あるか
という挙動を実現しています。