茶漬けと玉子焼き

swiftとrubyの教室

Ruby のメソッドオブジェクトとは?

メソッドオブジェクトって、あれなんだっけ?
となったのでメモっておきます。


一言で言えばメソッドオブジェクトとは、
メソッドをオブジェクトのように扱えるようにしたものです。


そのまんますぎ、
なので、
ちょっと例を書いてみます。


class Dog
  def bark
    puts 'wan!'
  end
end

dog = Dog.new
bark_wan = dog.method(:bark)  # メソッドオブジェクトを取得

# メソッドを書き換える
class Dog
  def bark
    puts 'bowwow!'
  end
end

dog.bark  # => bowwow!
bark_wan.call  # => wan!

# 得意メソッドとして書き換える
def dog.bark
  puts 'kyankyan!'
end

dog.bark  # => kyankyan!
bark_wan.call  # => wan!