proc和lambda的对比:
proc和lambda都是代码块打包的工具
不同之处在于:
proc对参数的自适应性,多则删,少填nil;lambda严格匹配
proc从block中返回,而lambda从function中返回
block is not a object in truth,but method is a clallable object
callable objects wrap-up
可调用对象本质上是可以执行的代码片段(拥有自己的作用域)
块在定义它的作用域中执行;
proc也跟块一样,也在定义它们的作用域中执行
lambda和proc一样都是闭包,同样在定义它的作用域中执行
method绑定于对象,在绑定的对象的作用域中执行,它们可以与这个作用域解除绑定,再重新绑定到另一个对象的作用域上。(与其说绑定到对象上,不如说绑定到作用域上。)
在方法和lambda中,return语句从可调用对象(我的理解是function)中返回,在block和proc中,return从定义可调用对象的原始上下文(我的理解是块本身)中返回。
如果proc代码块中的ruturn引起错误,可以通过隐去return关键字,来避免错误的出现。
一种可调用对象,可以转换成另一种可调用对象:
Proc.new()
Method#to_proc()
& operator
网友评论