[转帖]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的功能。
分享到:
相关推荐
一个非常简单的try-throw-catch源码
`try/catch/throw`是C++中的异常处理机制,用于在程序运行过程中捕获和处理错误。这个机制使得程序员可以在出现异常情况时,优雅地处理错误,而不是让程序突然崩溃。下面我们将深入探讨这些关键字的功能和用法。 1....
例如,在一个表单验证中,我们可以使用Try语句来检测用户的输入,如果输入错误,就可以Throw一个异常,然后在Catch语句中捕捉到这个错误,并显示一段自定义的错误消息。 在JavaScript中,还有许多其他的错误处理...
通过合理地使用`try`、`catch`、`throw`和`exception`等关键字,开发者不仅能够编写更加可靠的代码,还能显著提升程序的可维护性和可读性。 #### 二、C++标准异常处理 ##### 1. 构造和析构中的异常抛出 在C++中,...
本资源包含的源代码着重展示了C++中的两种基本异常处理方式,即`try-catch`块的应用。下面将详细介绍这两种基本形式以及C++异常处理的相关知识点。 ### 1. 异常基础 异常是在程序执行过程中发生的非正常事件,可能...
通过合理使用`throw`和其他异常处理结构(如`try-catch`),可以有效地管理程序中的异常情况。此外,创建和抛出自定义异常能够更精确地表示程序中特定类型的错误,从而提高代码的可读性和维护性。 总之,理解并正确...
throw语句通常与try-catch-finally语句配套使用,要么与throws配套使用。 throw的主要作用是明确地抛出一个异常,告訴调用者该方法已经抛出了一个异常。例如,`if (a != b) throw new Exception3("自定义异常");`,...
`raise`用于抛出异常,`catch/throw`用于非局部返回。 6. **集合和数组** Ruby提供了数组(Array)和哈希(Hash)两种主要的集合类型。数组使用索引访问,而哈希则通过键值对存储数据。Ruby还支持Range、Set和...
C++中try throw catch异常处理的用法示例 C++中的异常处理机制是通过try、throw和catch三个关键字来实现的。try块用于包围可能抛出异常的代码,throw语句用于抛出异常,而catch块用于捕获和处理异常。 try块的语法...
在Java中,`try`、`catch`、`finally`和`throw`这四个关键字构成了异常处理的核心。 #### `try`关键字 `try`关键字用于标记一段可能抛出异常的代码块。这部分代码被称为`try`块,它包含了可能会引发异常的操作。...
C++标准中定义了一种特殊的catch用法,那就是” catch(…)”。 感性认识 1、catch(…)到底是一个什么样的东东,先来个感性认识吧!看例子先: 代码如下: int main() { try { cout << “在 try block 中, 准备...
`raise`用于抛出异常,`catch`和`throw`用于非局部跳转。 8. **Gem包管理**:Ruby的Gem系统是其生态系统的核心,它允许开发者分享和重用代码。通过安装Gem,用户可以轻松地获取和使用各种库和框架,如Rails用于Web...
3. **finally中的return**:如果`finally`块中也包含了一个`return`语句,则该`return`语句会覆盖`try`块或`catch`块中的`return`语句。这意味着最终返回给调用者的值将是`finally`块中`return`语句指定的值。 综上...
catch 语句处理错误。 throw 语句创建自定义错误。 finally 语句在 try 和 catch 语句之后,无论是否有触发异常,该语句都会执行。 JavaScript 抛出(throw)错误 当错误发生时,当事情出问题时,JavaScript 引擎...
8. **异常处理**:Ruby使用`begin/rescue/else/ensure`来处理异常,`raise`用于抛出异常,`catch/throw`用于非局部退出。 9. **文件与目录操作**:Ruby的File和Dir类提供了丰富的文件和目录操作方法,如读写文件、...
若要在 C++ 中实现异常处理,你可以使用 try、throw 和 catch 表达式。 首先,使用 try 块将可能引发异常的一个或多个语句封闭起来。 throw 表达式发出信号,异常条件(通常是错误)已在 try 块中发生。你可以使用...