什么是触发器和lambdas?请举例说明

Bhu*_*dha 3 ruby lambda block proc

可能重复:
何时使用lambda,何时使用Proc.new?

(我知道有几次被问过,但我找不到满意的答案)有人可以解释一下Blocks,Procs和Lambdas以及为什么应该使用其他的,当一个人应该使用proc,类似和/或拉姆达.还会对计算机内存产生影响.请举例说明.

wal*_*.ar 7

请尝试Chris Pine的Robert Sosinski教程学习编程.

为了更多的基础,我建议你阅读为什么(尖锐的)Ruby指南.本指南负责创建许多现在的Ruby专业版!一定要看看!

Joey deVilla的解释

另一个重要但微妙的区别在于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)

由于这个令人惊讶的行为(以及更少的输入),我倾向于使用有利于lambdaProc.new制作特效的时候.