メソッドと Proc の相互変換(Ruby)

これらができたからとて、特にうれしいことはない感じです。

メソッド→Proc。Object#method と Method#to_proc を使う。

m = 100.method(:to_s)

p m    #=>#<Method: Integer#to_s(*)>
p m.call(2)    #=>"1100100"

pr = m.to_proc

p pr    #=>#<Proc:0x000055e967ad8300 (lambda)>
p pr.call(16)    #=>"64"

 
Proc→メソッド。Proc は無名関数なので、メソッド名が必要。あとは Module#define_method を使えばよい。

pr = ->(n, base) {n.to_s(base)}

define_method(:to_string, pr)

p to_string(100, 16)    #=>"64"