Bhu*_*dha 3 ruby lambda block proc
可能重复:
何时使用lambda,何时使用Proc.new?
(我知道有几次被问过,但我找不到满意的答案)有人可以解释一下Blocks,Procs和Lambdas以及为什么应该使用其他的,当一个人应该使用proc,类似和/或拉姆达.还会对计算机内存产生影响.请举例说明.
请尝试Chris Pine的Robert Sosinski教程或学习编程.
为了更多的基础,我建议你阅读为什么(尖锐的)Ruby指南.本指南负责创建许多现在的Ruby专业版!一定要看看!
另一个重要但微妙的区别在于procs创建的方式lambda和使用Proc.new句柄创建的procs return:
lambda-created proc中,return语句仅从proc本身返回Proc.new创建的proc中,return语句更令人惊讶:它不仅从proc返回控制,还从包含proc的方法返回控制!这是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"
Run Code Online (Sandbox Code Playgroud)
现在这里有一个Proc.new创建的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"
Run Code Online (Sandbox Code Playgroud)
由于这个令人惊讶的行为(以及更少的输入),我倾向于使用有利于lambda在Proc.new制作特效的时候.
| 归档时间: |
|
| 查看次数: |
818 次 |
| 最近记录: |