ヽ(´・肉・`)ノログ

How do we fighting without fighting?

ArrayにあってEnumerableにないメソッド一覧

Ruby で配列のようなものを持ったクラスを作りたいときに「Array を継承して作ると良いかな」と考えることが何度かあった. しかし実際には今までArrayを継承してクラスを作ったことがない. なぜなら,検討してみるとEnumerableのmixinで十分だったからだ.

「Arrayにはあって,Enumerableにないメソッド」というのがArrayにだけできることになる. どういったものが該当するのか調べてみよう.

Module や Class のインスタンスメソッド一覧を取得するには,Module#instance_methods を使う. ちなみに,今回は関係ないが Object のメソッド一覧を取得する場合には,Object#methods を使う. 配列同士の差分を見るには,Array#- を使う.

diff = Array.public_instance_methods(false) - Enumerable.public_instance_methods(false)
diff.sort.each {|method| puts method }
# >> &
# >> *
# >> +
# >> -
# >> <<
# >> <=>
# >> ==
# >> []
# >> []=
# >> assoc
# >> at
# >> bsearch
# >> clear
# >> collect!
# >> combination
# >> compact
# >> compact!
# >> concat
# >> delete
# >> delete_at
# >> delete_if
# >> each
# >> each_index
# >> empty?
# >> eql?
# >> fetch
# >> fill
# >> flatten
# >> flatten!
# >> frozen?
# >> hash
# >> index
# >> insert
# >> inspect
# >> join
# >> keep_if
# >> last
# >> length
# >> map!
# >> pack
# >> permutation
# >> pop
# >> product
# >> push
# >> rassoc
# >> reject!
# >> repeated_combination
# >> repeated_permutation
# >> replace
# >> reverse
# >> reverse!
# >> rindex
# >> rotate
# >> rotate!
# >> sample
# >> select!
# >> shift
# >> shuffle
# >> shuffle!
# >> size
# >> slice
# >> slice!
# >> sort!
# >> sort_by!
# >> to_ary
# >> to_s
# >> transpose
# >> uniq
# >> uniq!
# >> unshift
# >> values_at
# >> |

こうしてみるとよく使いそうなのはそんなに無さそうなことがわかる. map, inject, reverse, min, max などは Enumerable のメソッドなのだった.