RubyのMethodクラス

Twitterを眺めてたら、Method#source_locationというものを知ったのでclass Methodを読んでた。

メソッドのオブジェクト化は 12.method(:"+") のように Object#method を使う。

#任意のキーとメソッドの関係をハッシュに保持しておく
methods = {1 => obj.method(:foo),
2 => obj.method(:bar),
3 => obj.method(:baz)}

の例のように、キーとメソッドの関係を保持しておいたりする時に使うみたい。

メソッドの呼び出しは

method = 12.method(:"+")
method.call( 5 ) #=> 17

と call で呼び出す。

頻繁に使うものじゃないと思うけど、面白いと思ったメソッドをいくつか。

Method#arity

受け付ける引数の数を返す。可変引数の場合は可変引数も含めた数を負にしたものが返ってくる。

class C
def kuma(a, b,*c); end
end

C.new.method(:kuma).arity #=> -3

Method#owner

メソッドが定義されている class か module を返す。

Mehtod#receiver

メソッドオブジェクトのレシーバを返す。

Method#source_location

今回の面白メソッド一等賞。メソッドが定義されているファイル名と、その行番号が返ってくる。