Ruby中的block、proc、lambda区别总结
在规则引擎中,Ruby的闭包使用特别频繁,而且有block,Proc和lambda等后几种形式的用法,很让人困惑。为了深入理解代码,再次认真学习了一下Ruby的闭包,特别是block,proc和lambda几种用法的异同,这次的周记就和大家分享一下心得。
闭包是Ruby相对其它语言特别优势之一,很多语言有闭包,但是唯有Ruby把闭包的优势发挥得淋漓尽致。Ruby的哲学之一:同一个问题现实中有多种解决方法,所以Ruby中也有多种解法,所以闭包的使用也有多种方法。
先看一个代码的例子:
Example1:
deffoo1 yield end
deffoo2(&b) b.callifb end
foo1{puts"foo1inblock"} foo2{puts"foo2inblock"} proc=Proc.new{puts"fooinproc"} foo1(&proc) foo2(&proc) lambda_proc=lambda{puts"fooinlambda"} foo1(&lambda_proc) foo2(&lambda_proc)