(我知道有几次被问到但是我找不到满意的答案)有人可以解释一下Blocks,Procs和Lambdas以及为什么应该使用其他的,当一个人应该使用proc时会出现什么情况,类似和/或lambda。还会对计算机内存产生影响。请举例说明。
答案 0 :(得分:7)
尝试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 return
。它的行为方式可能是您所期望的:
def whowouldwin
mylambda = lambda {return "Freddy"}
mylambda.call
# mylambda gets called and returns "Freddy", and execution
# continues on the next line
return "Jason"
end
whowouldwin
=> "Jason"
现在这里是一个Proc.new
- 创建的proc return
做同样的事情。你将要看到其中一个案例,其中Ruby打破了大肆吹嘘的最低惊喜原则:
def whowouldwin2
myproc = Proc.new {return "Freddy"}
myproc.call
# myproc gets called and returns "Freddy",
# but also returns control from whowhouldwin2!
# The line below *never* gets executed.
return "Jason"
end
whowouldwin2
=> "Freddy"
由于这种令人惊讶的行为(以及较少的输入),我倾向于在制作过程时使用lambda
而不是Proc.new
。