ruby – 为什么调用在方法中声明的返回Proc工作?

我一直在玩Codecademy Ruby课程,还有一个关于lambdas和Procs的练习.我确实理解了差异,但我不太明白为什么第一个代码列表在这里工作,而第二个代码没有.

为什么这样做:

def batman_ironman_proc
  p = Proc.new { return "Batman will win!" }
  p.call
  "Iron Man will win!"
end

puts batman_ironman_proc  # prints "Batman will win!"

但不是这个:

def batman_ironman_proc(p)
  p.call
  "Iron Man will win!"
end

p = Proc.new { return "Batman will win!" }
puts batman_ironman_proc(p)  # unexpected return

解决方法

这是因为proc对控制流关键字的行为如何:return,raise,break,redo,retry等.

这些关键字将从定义proc的范围跳转,否则lambda有自己的范围,因此这些关键字将从lambda的范围跳转.

在第二个示例中,proc在main的范围内定义.正如tadman在下面评论的那样,你不能从主要回来,只有退出可用.

如果从proc切换到lambda,您的代码将起作用.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...