proc和lambda的對比:
proc和lambda都是代碼塊打包的工具
不同之處在于:
proc對參數(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)用對象本質(zhì)上是可以執(zhí)行的代碼片段(擁有自己的作用域)
塊在定義它的作用域中執(zhí)行;
proc也跟塊一樣,也在定義它們的作用域中執(zhí)行
lambda和proc一樣都是閉包,同樣在定義它的作用域中執(zhí)行
method綁定于對象,在綁定的對象的作用域中執(zhí)行,它們可以與這個作用域解除綁定,再重新綁定到另一個對象的作用域上。(與其說綁定到對象上,不如說綁定到作用域上。)
在方法和lambda中,return語句從可調(diào)用對象(我的理解是function)中返回,在block和proc中,return從定義可調(diào)用對象的原始上下文(我的理解是塊本身)中返回。
如果proc代碼塊中的ruturn引起錯誤,可以通過隱去return關(guān)鍵字,來避免錯誤的出現(xiàn)。
一種可調(diào)用對象,可以轉(zhuǎn)換成另一種可調(diào)用對象:
Proc.new()
Method#to_proc()
& operator