`
fujinbing
  • 浏览: 238747 次
  • 性别: 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的功能。
分享到:
评论

相关推荐

    Ruby语言中文教程

    `raise`用于抛出异常,`catch/throw`用于非局部返回。 6. **集合和数组** Ruby提供了数组(Array)和哈希(Hash)两种主要的集合类型。数组使用索引访问,而哈希则通过键值对存储数据。Ruby还支持Range、Set和...

    Ruby语言中文教程.rar

    `raise`用于抛出异常,`catch`和`throw`用于非局部跳转。 8. **Gem包管理**:Ruby的Gem系统是其生态系统的核心,它允许开发者分享和重用代码。通过安装Gem,用户可以轻松地获取和使用各种库和框架,如Rails用于Web...

    ruby开发文档

    8. **异常处理**:Ruby使用`begin/rescue/else/ensure`来处理异常,`raise`用于抛出异常,`catch/throw`用于非局部退出。 9. **文件与目录操作**:Ruby的File和Dir类提供了丰富的文件和目录操作方法,如读写文件、...

    Ruby语言中文教程(附源码)

    2. `raise`用于主动抛出异常,`throw`和`catch`则用于非局部退出。 六、Gem与Rails框架 1. Gem:Ruby的包管理系统,用于安装和管理第三方库。 2. Rails:基于Ruby的全栈Web开发框架,遵循MVC架构,提供了一系列便捷...

    ruby初学者教程(对初学者很有帮助)

    - **Windows平台**:可以通过RubyInstaller进行安装,安装过程中可以选择是否添加Ruby到系统的PATH环境中。 - **Linux平台**:大多数Linux发行版都提供了Ruby的软件包,可以通过包管理器(如apt-get或yum)轻松安装...

    Programming Ruby

    - **第8章:Exceptions, Catch, and Throw**:异常处理是任何现代编程语言的重要组成部分,本章详细介绍了Ruby中的异常处理机制。 - **第9章:Modules**:模块(module)在Ruby中用于组织代码和提供命名空间隔离。 - *...

    Ruby语言教程大纲.zip

    在Ruby中,学习如何有效地使用raise和throw/catch也是重要的。 7. **元编程**:Ruby的元编程能力允许在运行时动态修改代码,这使得Ruby具有极高的灵活性。了解eval、send、instance_variable_get/set等方法是深入...

    Ruby程序设计.doc

    这部分内容未给出详细章节,但可以从上下文推断,这部分可能涉及Ruby中的序列化技术以及YAML格式的使用。 以上内容覆盖了Ruby程序设计的核心知识点,从语言基础到高级特性均有涉及。通过这些知识点的学习,可以全面...

    ruby 程序设计

    - **Windows平台**:对于Windows操作系统,可以通过RubyInstaller进行安装,安装过程中可以选择是否将Ruby添加到系统路径中。 - **Linux平台**:大多数Linux发行版已经包含了Ruby包,可以通过包管理器如apt-get或yum...

    Ruby程序设计(简洁清新的教程)

    这个名字非常贴切,因为在日历中,红宝石(Ruby)代表七月,而Perl代表六月;此外,从字体大小的角度来看,Perl大小通常为5pt,而Ruby的大小为5.5pt,这使得Ruby这个名字对于一种Perl的后续语言来说非常合适。 **...

    RUBY基础入门指南

    - **使用Ruby**:直接在命令行中输入`ruby filename.rb`来运行脚本文件。 - **使用IDE**:推荐使用FreeRIDE或SciTE等集成开发环境,提供更好的编辑体验。 **2.3 Ruby-irb** IRB(Interactive Ruby Shell)是一个...

    ruby语法基础教程

    §9.3 catch和throw 68 第十章 多任务处理 69 §10.1 多线程处理 69 §10.1.1 线程创建 69 §10.1.2 线程操作 70 §10.1.3 线程和异常 71 §10.1.4 线程调度 73 §10.1.5 线程同步 73 §10.2 多进程处理 79 §10.2.1...

    ruby语法基础教程.pdf

    - **catch和throw:** 提供了一种简单的异常抛出和捕获机制。 #### 十、多任务处理 - **多线程处理:** Ruby支持多线程编程,可以利用线程并行执行任务。 - **多进程处理:** Ruby也支持多进程编程,可以启动多个...

    Ruby程序设计(word文档).zip

    6. **异常处理**:Ruby使用`begin-rescue-ensure-end`结构处理异常,`raise`用于抛出异常,`catch`和`throw`则用于标签式异常处理。 7. **块、Proc和Lambda**:Ruby的块是代码片段的封装,通常与迭代器配合使用。...

    Ruby程序设计

    7. **异常处理**:Ruby使用`begin-rescue-end`结构处理异常,`raise`用于抛出异常,`catch`和`throw`用于非局部退出。 8. **Gem包管理**:Ruby的生态系统中,Gem是库或框架的打包格式,通过`gem install`命令安装,...

Global site tag (gtag.js) - Google Analytics