`
fujinbing
  • 浏览: 232936 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ruby 中的 catch throw

    博客分类:
  • java
 
阅读更多
使用raise,rescue用来处理出错的情况,同时也可以使处理流程从很深的嵌套结构中跳出。catch和throw也能使处理流程从很深的嵌套结构中跳出。
Catch定义了一个代码块,并给这个代码块一个名字作为标注。当Ruby遇到一个throw时会展开调用堆栈来查找相应的catch块,当找到时,Ruby在相应得catch处展开堆栈并中止块。

def method1(n)
puts n
throw :done if n <= 0
method1(n-1)
end

catch(:done) {
method1(3)
puts "Can not reach here!"
}
puts "Reach here!"

执行结果:
3
2
1
0
Reach here!
上面的例子中,我们首先用“catch(:done)”标注了一个块,当执行到“throw :done”时,中止当前“catch(:done)”所标注的块,处理流程继续向下处理。
在catch/throw中,当碰到throw时,Ruby会展开调用堆栈来查找匹配的catch,当找到后,堆栈会被展开,catch块剩余的代码不会被执行。
Ruby中没有goto 语句,但你可以使用catch/throw或异常来实现goto的功能。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics