一、’Proc 类的对象‘和对象的’method‘关系
二、method 转到 Proc 的对象
def plus(a,b)
a + b
end
method(:plus).methods.grep /^to./ # to_proc 方法
p1=method(:plus).to_proc # 转换为
p1.class # Proc的对象
def math(a,b) #在函数中使用上面生成的p1
yield(a,b)
end
puts math(2,3,&p1)
#=>5
p2=method(:plus) # 2013.4.25
puts math(2,3,&p) #default call to_proc method
$=>5
[1,2,3].map(&:to_s) #2013,4.25
#=>["1", "2", "3"]
#其中 &:to_s ===> proc{ | o | o.send(self) }
三 Proc 的对象转到 method
p1 = proc{p 'hi,world'}
class A
end
a = A.new
#1.添加类的实例方法
A.send(:define_method, :hi, &p1)
A.instance_methods(false)
a.hi #=>"hi,world"
#2.添加为类方法
A.singleton_class.send(:define_method, :hi, &p1)
A.methods(false)
A.hi #=>"hi,world"