Try 罗伯特·索辛斯基的教程 http://www.robertsosinski.com/2008/12/21/understanding-ruby-blocks-procs-and-lambdas/ or 学习编程 作者:Chris Pine http://pine.fm/LearnToProgram/?Chapter=10.
如需更多基础,我建议您阅读Why 的(令人心酸的)Ruby 指南 http://mislav.uniqpath.com/poignant-guide/book/。本指南负责创建当今许多 Ruby's Pro!一定要去看一看!
解释者乔伊·德维拉 https://stackoverflow.com/users/216/joey-devilla
另一个重要但微妙的区别是创建过程的方式lambda
和创建的进程Proc.new
处理return
陈述:
- In a
lambda
-创建的过程,return
语句仅从过程本身返回
- In a
Proc.new
-创建的过程,return
语句有点令人惊讶:它不仅从进程返回控制权,而且还来自包含过程的方法!
Here's lambda
-创建的过程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
-创建的过程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
over Proc.new
制作过程时。