微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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,您的代码将起作用.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐