Ruby 教程 之 Ruby 异常 8
Ruby 异常
异常和执行总是被联系在一起。如果您打开一个不存在的文件,且没有恰当地处理这种情况,那么您的程序则被认为是低质量的。
Catch 和 Throw
raise 和 rescue 的异常机制能在发生错误时放弃执行,有时候需要在正常处理时跳出一些深层嵌套的结构。此时 catch 和 throw 就派上用场了。
catch 定义了一个使用给定的名称(可以是 Symbol 或 String)作为标签的块。块会正常执行直到遇到一个 throw。
语法
throw :lablename
.. 这不会被执行
catch :lablename do
.. 在遇到一个 throw 后匹配将被执行的 catch
end
或
throw :lablename condition
.. 这不会被执行
catch :lablename do
.. 在遇到一个 throw 后匹配将被执行的 catch
end
实例
下面的实例中,如果用户键入 '!' 回应任何提示,使用一个 throw 终止与用户的交互。
实例
def promptAndGet(prompt)
print prompt
res = readline.chomp
throw :quitRequested if res == "!"
return res
end
catch :quitRequested do
name = promptAndGet("Name: ")
age = promptAndGet("Age: ")
sex = promptAndGet("Sex: ")
..
处理信息
end
promptAndGet("Name:")
上面的程序需要人工交互,您可以在您的计算机上进行尝试。以上实例运行输出结果为:
Name: Ruby on Rails
Age: 3
Sex: !
Name:Just Ruby