在 Ruby 中,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
catch 定义了一个使用给定的名称(可以是 Symbol 或 String)作为标签的块。块会正常执行直到遇到一个 throw。
Catch 和 Throw 使用
#!/usr/bin/ruby -w
# -*- coding : utf-8 -*-
puts "HaiCoder(www.haicoder.net)"
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:")
运行后,输出如下:
如果用户键入 ‘!’ 回应任何提示,使用一个 throw 终止与用户的交互。
在 Ruby 中,raise 和 rescue 的异常机制能在发生错误时放弃执行,有时候需要在正常处理时跳出一些深层嵌套的结构。此时 catch 和 throw 就派上用场了。
catch 定义了一个使用给定的名称(可以是 Symbol 或 String)作为标签的块。块会正常执行直到遇到一个 throw。