0
0

More than 5 years have passed since last update.

[Ruby] Methodクラスとは

Posted at

ドキュメントはこのあたりを確認してください。

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>

helloMethodオブジェクトです。

メソッドの呼び出し

Method#callでメソッドを呼び出すことができます。このとき特定のレシーバと紐づいていることに注意しましょう。

hello.call
# => "hello yui"

この例ではmyと紐づいているため、my@nameyuiが表示されます。

Methodオブジェクトについて調べる

Methodにはオブジェクト自身を調べるためのインスタンスメソッドがいくつか定義されています。
Method#ownerでメソッドが定義されているclassもしくはmoduleがわかります。またMethod#receiverで自分に紐づいているオブジェクトが分かります。

hello.owner
# => MyClass

hello.receiver
# => #<MyClass:0x42096d8 @name="yui">
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0