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,您的代码将起作用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |