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オブジェクトを持っているからです。