methodで得たメソッドオブジェクトはselfを知っている

methodメソッドを使うと、メソッドオブジェクトを得ることができます。得たオブジェクトは元のselfを知っています。

class Rubyco
  def initialize(you)
    @you = you
  end
  def hello
    puts "Hello, #{@you}!"
  end
  attr_accessor :you
end

r = Rubyco.new("Alice")
r.hello                   #=> Hello, Alice!

m = r.method(:hello)
m.call                    #=> Hello, Alice!

r.you = "Bobby"
m.call                    #=> Hello, Bobby!

このように、途中で@youの値を"Bobby"に変えると、m.callの結果もそれに応じて変化します。mが保持しているメソッドオブジェクトが元のRubycoオブジェクトを持っているからです。