Ruby 什么是过程和lambdas?请举例说明

Ruby 什么是过程和lambdas?请举例说明,ruby,lambda,block,proc,Ruby,Lambda,Block,Proc,可能重复: (我知道有人问了好几次,但我找不到满意的答案)有人能解释一下块、proc和lambda以及为什么应该使用一个而不是另一个,应该使用proc、类似和/或lambda的情况是什么。对计算机内存也有影响。请提供实例。试试或 为了更多的基础,我建议你阅读。本指南负责创建许多当今Ruby的Pro!一定要看一看 解释 另一个重要但微妙的区别在于使用lambda创建的过程和使用Proc.new创建的过程处理return语句的方式: 在lambda创建的过程中,return语句仅从过程本身返回

可能重复:

(我知道有人问了好几次,但我找不到满意的答案)有人能解释一下块、proc和lambda以及为什么应该使用一个而不是另一个,应该使用proc、类似和/或lambda的情况是什么。对计算机内存也有影响。请提供实例。

试试或

为了更多的基础,我建议你阅读。本指南负责创建许多当今Ruby的Pro!一定要看一看

解释

另一个重要但微妙的区别在于使用
lambda
创建的过程和使用
Proc.new
创建的过程处理
return
语句的方式:

  • lambda
    创建的过程中,
    return
    语句仅从过程本身返回
  • Proc.new
    创建的Proc中,
    return
    语句更令人惊讶:它不仅从Proc返回控制权,,而且从包含该Proc的方法返回控制权
下面是
lambda
-创建的进程
返回
正在运行。它的行为方式可能是您所期望的:

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的
返回
做同样的事情。您将看到其中一个案例,其中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

你看过这一个吗?谷歌第一个关于?