使用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,带程序例子
try/catch/throw try/catch/throw的优点: 1.可以自定义抛出异常之后的操作 2.异常抛出后会一直返回调用函数(或者说上一层函数),直到被catch到,所以便可以统一将catch语句写在一起,使代码更加方便整洁。 1....
一个非常简单的try-throw-catch源码
今天在开发过程中调用一个库函数结果库函数有throw操作,当前代码没有对throw进行捕获操作,导致进程在main 函数中捕获到异常导致进程crash。所以借此记录下c++关于try,throw,catch的用法。 程序运行时常会碰到一些...
异常处理的基本思想是简化程序的错误代码,为程序键壮性提供一个标准检测机制。 本文为你解释怎样处理C++的异常处理。提供了大量的code
若要在 C++ 中实现异常处理,你可以使用 try、throw 和 catch 表达式。 首先,使用 try 块将可能引发异常的一个或多个语句封闭起来。 throw 表达式发出信号,异常条件(通常是错误)已在 try 块中发生。你可以使用...
WEB开发 之 JavaScript 错误 - Throw、Try 和 Catch.docx
C++标准中定义了一种特殊的catch用法,那就是” catch(…)”。 感性认识 1、catch(…)到底是一个什么样的东东,先来个感性认识吧!看例子先: 代码如下: int main() { try { cout << “在 try block 中, 准备...
catch 语句处理错误。 throw 语句创建自定义错误。 finally 语句在 try 和 catch 语句之后,无论是否有触发异常,该语句都会执行。 JavaScript 抛出(throw)错误 当错误发生时,当事情出问题时,JavaScript 引擎...
throw异常:C#语言throw异常处理语句, throw语句用于发出在执行期间出现反常情况(异常)信号throw语句通常和try-catch或try-finally语句起使用可以使用throw语句显式引发异常(这里引发自定义异常)创建用户自定义异常...
重载重写、接口、抽象类、String指针和字符串拼接、异常catch、throw、throws、字符流和字节流
异常中throw与throws的使用区别
Java中的throw与throws的关键字的使用
JavaScript 错误 – throw、try 和 catch try 语句测试代码块的错误。 catch 语句处理错误。 throw 语句创建自定义错误。 finally 语句在 try 和 catch 语句之后,无论是否有触发异常,该语句都会执行。 ...
§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...
主要介绍了C++异常处理 try,catch,throw,finally的用法,需要的朋友可以参考下
Java的throw和return