可能重复:何时使用lambda,何时使用Proc.new?
(我知道有几次被问过,但我找不到满意的答案)有人可以解释一下Blocks,Procs和Lambdas以及为什么应该使用其他的,当一个人应该使用proc,类似和/或拉姆达 . 还会对计算机内存产生影响 . 请举例说明 .
试试Robert Sosinski's Tutorial或Learning to Program by Chris Pine .
为了更多基础,我建议你阅读Why’s (poignant) Guide to Ruby . 本指南负责创建许多现在的Ruby专业版!一定要看看!
Joey deVilla的解释另一个重要但微妙的区别在于使用lambda创建的procs和使用Proc.new创建的procs处理return语句的方式:在lambda创建的proc中,return语句仅从proc本身返回在Proc.new创建的proc中, return语句更令人惊讶:它不仅从proc返回控制,还从包含proc的方法返回控制!这是lambda创建的proc的回归 . 它表现得像你可能期望的那样:defowowwinwin
mylambda = lambda {return“Freddy”}mylambda.call
#mylambda被调用并返回“Freddy”,并执行#继续下一行
回归“杰森”
结束
whowouldwin
“杰森”现在,这是一个Proc.new创建的proc的返回做同样的事情 . 你将要看到其中一个案例,其中Ruby打破了大肆吹嘘的最低惊喜原则:defowouldwin2
myproc = Proc.new {return“Freddy”}myproc.call
#myproc被调用并返回“Freddy”,#还可以从whowhouldwin2返回控制权!#下面的行从不执行 .
whowouldwin2
“弗雷迪”由于这种令人惊讶的行为(以及较少的打字),我倾向于在制作过程时使用lambda而不是Proc.new .
1 回答
试试Robert Sosinski's Tutorial或Learning to Program by Chris Pine .
为了更多基础,我建议你阅读Why’s (poignant) Guide to Ruby . 本指南负责创建许多现在的Ruby专业版!一定要看看!
Joey deVilla的解释
另一个重要但微妙的区别在于使用lambda创建的procs和使用Proc.new创建的procs处理return语句的方式:在lambda创建的proc中,return语句仅从proc本身返回在Proc.new创建的proc中, return语句更令人惊讶:它不仅从proc返回控制,还从包含proc的方法返回控制!这是lambda创建的proc的回归 . 它表现得像你可能期望的那样:defowowwinwin
mylambda = lambda {return“Freddy”}
mylambda.call
#mylambda被调用并返回“Freddy”,并执行
#继续下一行
回归“杰森”
结束
whowouldwin
myproc = Proc.new {return“Freddy”}
myproc.call
#myproc被调用并返回“Freddy”,
#还可以从whowhouldwin2返回控制权!
#下面的行从不执行 .
回归“杰森”
结束
whowouldwin2