在Ruby 1.8中,proc/lambda与proc.new之间存在细微的差异
- 这些区别是什么
- 你能就如何决定选择哪一个给出指导方针吗
- 在Ruby1.9中,proc和lambda是不同的。怎么回事
使用lambda创建的过程与使用Proc.new创建的过程之间的另一个重要但微妙的区别是它们如何处理return语句:
- 在
lambda创建的过程中,return语句仅从过程本身返回 - 在
Proc.new创建的Proc中,return语句更令人惊讶:它不仅从Proc返回控制权,,而且从包含该Proc的方法返回控制权
下面是lambda-创建的进程返回正在运行。它的行为方式可能是您所期望的:
def谁会赢
mylambda=lambda{返回“Freddy”}
迈拉姆达,打电话来
#mylambda被调用并返回“Freddy”,然后执行
#继续下一行
返回“Jason”
终止
谁会赢
#=>;“杰森”
现在这里有一个新的Proc.new-创建的Proc的返回做同样的事情。您将看到其中一个案例,其中Ruby打破了备受吹嘘的最小意外原则:
def谁会赢2
myproc=Proc.new{返回“Freddy”}
myproc.call
#myproc被调用并返回“Freddy”,
#但也会从WhouldWin2返回控制!
#下面的行*从不*被执行。
返回“Jason”
终止
谁会赢
#=>;“弗雷迪”
由于这种令人惊讶的行为(以及更少的键入),我倾向于在制作过程中使用lambda而不是Proc.new