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

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

概述我一直在玩Codecademy Ruby课程,还有一个关于lambdas和Procs的练习.我确实理解了差异,但我不太明白为什么第一个代码列表在这里工作,而第二个代码没有. 为什么这样做: def batman_ironman_proc p = Proc.new { return "Batman will win!" } p.call "Iron Man will win!"end 我一直在玩Codecademy Ruby课程,还有一个关于lambdas和Procs的练习.我确实理解了差异,但我不太明白为什么第一个代码列表在这里工作,而第二个代码没有.

为什么这样做:

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

但不是这个:

def batman_ironman_proc(p)  p.call  "Iron Man will win!"endp = 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,您的代码将起作用.

总结

以上是内存溢出为你收集整理的ruby – 为什么调用在方法中声明返回Proc工作?全部内容,希望文章能够帮你解决ruby – 为什么调用在方法中声明的返回Proc工作?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1275202.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存