什么是 procs 和 lambdas?请提供实际示例[重复]

Posted

技术标签:

【中文标题】什么是 procs 和 lambdas?请提供实际示例[重复]【英文标题】:what are procs and lambdas? practical examples please [duplicate] 【发布时间】:2012-07-19 20:17:59 【问题描述】:

可能重复:When to use lambda, when to use Proc.new?

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

【问题讨论】:

你看过这个***.com/questions/626/… 吗? en.wikibooks.org/wiki/Ruby_Programming/Syntax/… 关于understanding-ruby-blocks-procs-and-lambdas主题的第一个谷歌结果有什么问题? 【参考方案1】:

试试Robert Sosinski's Tutorial 或Learning to Program by Chris Pine。

关于更多的基础,我建议你阅读Why’s (poignant) Guide to Ruby。本指南负责创建当今许多 Ruby 的 Pro!一定要看看!

Joey deVilla的解释

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

lambda-created proc 中,return 语句仅从 proc 本身返回 在Proc.new-created proc 中,return 语句更令人惊讶:它不仅从 proc 返回控制权,还从包含 proc 的方法返回!

这是lambda-created 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-created 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"

由于这种令人惊讶的行为(以及更少的打字),我倾向于在制作 procs 时使用 lambda 而不是 Proc.new

【讨论】:

以上是关于什么是 procs 和 lambdas?请提供实际示例[重复]的主要内容,如果未能解决你的问题,请参考以下文章

ruby中proc和lambda的return区别

返回 procs、lambdas 和 blocks 中的语句

为啥我应该使用 lambda/proc ?解释它的重要性 [重复]

proc、Proc.new、lambda 和 stabby lambda 之间的速度差异

为啥 Enumerable#detect 需要 Proc/lambda?

Ruby:将proc转换为lambda?