(我知道它已经被问了好几次,但我找不到满意的答案)有人可以解释一下 Blocks、Procs 和 Lambdas 以及为什么应该使用一个而不是另一个,什么情况下应该使用 proc,类似和/或拉姆达。对计算机内存也有影响。请提供实际示例。
问问题
939 次
1 回答
7
试试Robert Sosinski 的教程或Chris Pine 的学习编程。
对于更多的基础,我建议你阅读Why's (poignant) Guide to Ruby。本指南负责创建当今许多 Ruby 的 Pro!一定要看看!
乔伊·德维拉的解释
另一个重要但微妙的区别是 procs created withlambda
和 procs created withProc.new
处理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 procreturn
做同样的事情。您即将看到 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
over 。Proc.new
于 2012-07-20T14:29:17.250 回答