ドキュメントはこのあたりを確認してください。
Methodクラスって?
特定のレシーバと紐づいたメソッドを表現できます。
オブジェクトの作り方
Object#method(name)
を使って作ります。name
はメソッド名を表す文字列もしくはシンボルです。
class MyClass
def initialize(name)
@name = name
end
def hello
p "hello #{@name}"
end
end
my = MyClass.new('yui')
# => #<MyClass:0x42096d8 @name="yui">
hello = my.method(:hello)
# => #<Method: MyClass#hello>
hello
がMethod
オブジェクトです。
メソッドの呼び出し
Method#call
でメソッドを呼び出すことができます。このとき特定のレシーバと紐づいていることに注意しましょう。
hello.call
# => "hello yui"
この例ではmy
と紐づいているため、my@name
のyui
が表示されます。
Methodオブジェクトについて調べる
Method
にはオブジェクト自身を調べるためのインスタンスメソッドがいくつか定義されています。
Method#owner
でメソッドが定義されているclassもしくはmoduleがわかります。またMethod#receiver
で自分に紐づいているオブジェクトが分かります。
hello.owner
# => MyClass
hello.receiver
# => #<MyClass:0x42096d8 @name="yui">