`
biyeah
  • 浏览: 201433 次
  • 来自: ...
社区版块
存档分类
最新评论

[转帖]ruby中的catch throw

    博客分类:
  • Ruby
 
阅读更多
[转帖]ruby中的catch throw
原文:http://fujinbing.iteye.com/blog/1126246

    使用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的功能。
分享到:
评论

相关推荐

    C++语言处理异常 try catch throw

    C++语言处理异常 try catch throw,带程序例子

    try/catch/throw

    try/catch/throw try/catch/throw的优点: 1.可以自定义抛出异常之后的操作 2.异常抛出后会一直返回调用函数(或者说上一层函数),直到被catch到,所以便可以统一将catch语句写在一起,使代码更加方便整洁。 1....

    简单的try-throw-catch源码

    一个非常简单的try-throw-catch源码

    WEB开发 之 JavaScript 错误 - Throw、Try 和 Catch.docx

    例如,在一个表单验证中,我们可以使用Try语句来检测用户的输入,如果输入错误,就可以Throw一个异常,然后在Catch语句中捕捉到这个错误,并显示一段自定义的错误消息。 在JavaScript中,还有许多其他的错误处理...

    throws与throw的区别

    throw语句通常与try-catch-finally语句配套使用,要么与throws配套使用。 throw的主要作用是明确地抛出一个异常,告訴调用者该方法已经抛出了一个异常。例如,`if (a != b) throw new Exception3("自定义异常");`,...

    Ruby语言中文教程

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

    C++中try throw catch异常处理的用法示例

    C++中try throw catch异常处理的用法示例 C++中的异常处理机制是通过try、throw和catch三个关键字来实现的。try块用于包围可能抛出异常的代码,throw语句用于抛出异常,而catch块用于捕获和处理异常。 try块的语法...

    C++异常处理技巧try/catch/throw/finally/exception

    异常处理的基本思想是简化程序的错误代码,为程序键壮性提供一个标准检测机制。 本文为你解释怎样处理C++的异常处理。提供了大量的code

    C++编程异常处理中try和throw以及catch语句的用法

    若要在 C++ 中实现异常处理,你可以使用 try、throw 和 catch 表达式。 首先,使用 try 块将可能引发异常的一个或多个语句封闭起来。 throw 表达式发出信号,异常条件(通常是错误)已在 try 块中发生。你可以使用...

    C++ 异常处理 catch(…)介绍

    C++标准中定义了一种特殊的catch用法,那就是” catch(…)”。 感性认识 1、catch(…)到底是一个什么样的东东,先来个感性认识吧!看例子先: 代码如下: int main() { try { cout &lt;&lt; “在 try block 中, 准备...

    Ruby语言中文教程.rar

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

    JavaScript语句错误throw、try及catch实例解析

    catch 语句处理错误。 throw 语句创建自定义错误。 finally 语句在 try 和 catch 语句之后,无论是否有触发异常,该语句都会执行。 JavaScript 抛出(throw)错误 当错误发生时,当事情出问题时,JavaScript 引擎...

    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架构,提供了一系列便捷...

    java try…catch捕获异常的实例

    即使在`try`或`catch`块中有`return`语句,`finally`块中的代码也会被执行: ```java try { // 代码 } catch (ExceptionType1 e1) { // 处理 } catch (ExceptionType2 e2) { // 处理 } finally { // 清理资源,...

    C# 中的try catch finall 的使用方法

    4. `throw`关键字:在`catch`块中,如果需要重新抛出当前异常或者抛出一个新的异常,可以使用`throw;`(不带任何参数)来重新抛出原始异常,或者使用`throw new Exception(...);`创建并抛出新异常。 通过`try-catch...

    java throw抛出异常实例二

    `throw`关键字在Java中被用来显式地抛出一个异常。当我们遇到一个预期之外的情况,或者某些条件不满足时,可以使用`throw`来中断当前的执行流程,并将控制权转移到能够处理这种情况的代码块。下面我们将详细讨论`...

    C# throw詳解

    throw异常:C#语言throw异常处理语句, throw语句用于发出在执行期间出现反常情况(异常)信号throw语句通常和try-catch或try-finally语句起使用可以使用throw语句显式引发异常(这里引发自定义异常)创建用户自定义异常...

Global site tag (gtag.js) - Google Analytics