Ruby Methodクラス UnboundMethodクラス
Methodオブジェクトは、メソッドを保存でき、callで実行できる
class A def hoge puts 1 end end a = A.new.method(:hoge) a.call #=>
UnboundMethodはメソッドの付け替えが可能 同じクラス、もしくはサブクラスにしかつけかえられない
class C def my_method 88 end end class A end u = C.instance_method(:my_method) p u.bind(C.new).call #=> 88 p u.bind(A.new).call #=> TypeError: bind argument must be an instance of C
- self の instance_methodを指定するとメソッドをUnboundMethodとしてとりだすことができる
モジュールのメソッドを使ってbindする
module M def my_method 88 end end class A end u = M.instance_method(:my_method) p u.bind(A.new).call #=> 88
- 以上が成功するのは、module Mのクラスが、Moduleクラスだから。ClassのsuperclassはModuleだからだとおもう。たぶん。