proc和lambda的對(duì)比:
proc和lambda都是代碼塊打包的工具
不同之處在于:
proc對(duì)參數(shù)的自適應(yīng)性鲁沥,多則刪,少填nil廊蜒;lambda嚴(yán)格匹配
proc從block中返回湃番,而lambda從function中返回
block is not a object in truth婆誓,but method is a clallable object
callable objects wrap-up
可調(diào)用對(duì)象本質(zhì)上是可以執(zhí)行的代碼片段(擁有自己的作用域)
塊在定義它的作用域中執(zhí)行;
proc也跟塊一樣羹饰,也在定義它們的作用域中執(zhí)行
lambda和proc一樣都是閉包伊滋,同樣在定義它的作用域中執(zhí)行
method綁定于對(duì)象碳却,在綁定的對(duì)象的作用域中執(zhí)行,它們可以與這個(gè)作用域解除綁定新啼,再重新綁定到另一個(gè)對(duì)象的作用域上追城。(與其說綁定到對(duì)象上,不如說綁定到作用域上燥撞。)
在方法和lambda中座柱,return語(yǔ)句從可調(diào)用對(duì)象(我的理解是function)中返回,在block和proc中物舒,return從定義可調(diào)用對(duì)象的原始上下文(我的理解是塊本身)中返回色洞。
如果proc代碼塊中的ruturn引起錯(cuò)誤,可以通過隱去return關(guān)鍵字冠胯,來避免錯(cuò)誤的出現(xiàn)火诸。
一種可調(diào)用對(duì)象,可以轉(zhuǎn)換成另一種可調(diào)用對(duì)象:
Proc.new()
Method#to_proc()
& operator