加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 02:20:21 所属栏目:百科 来源:网络整理
导读:我一直在玩Codecademy Ruby课程,还有一个关于lambdas和Procs的练习.我确实理解了差异,但我不太明白为什么第一个代码列表在这里工作,而第二个代码没有. 为什么这样做: def batman_ironman_proc p = Proc.new { return "Batman will win!" } p.call "Iron Man
我一直在玩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,您的代码将起作用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读