什么是 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?请提供实际示例[重复]的主要内容,如果未能解决你的问题,请参考以下文章
返回 procs、lambdas 和 blocks 中的语句
为啥我应该使用 lambda/proc ?解释它的重要性 [重复]
proc、Proc.new、lambda 和 stabby lambda 之间的速度差异