深入探索
省略 begin 和 end
在方法,类或模块中捕获异常时,你可以选择省略 begin
和 end
。例如,以下所有内容都是合法的:
omit_begin_end.rb
def calc
result = 1/0
rescue Exception => e
puts( e.class )
puts( e )
result = nil
return result
end
class X
@@x = 1/0
rescue Exception => e
puts( e.class )
puts( e )
end
module Y
@@x = 1/0
rescue Exception => e
puts( e.class )
puts( e )
end
在上面显示的所有情况中,如果以通常的方式将 begin
和 end
关键字放在异常处理代码块的开头和结尾,则异常处理也会起作用。
Catch…Throw
在某些语言中,可以使用关键字 catch
捕获异常,使用关键字 throw
来抛出异常。虽然 Ruby 提供了 catch
和 throw
方法,但它们与异常处理没有直接关系。相反,catch
和 throw
用于在满足某些条件时跳出已定义的代码块。当然,在发生异常时,你也可以使用 catch
和 throw
来跳出代码块(尽管这可能不是处理错误的最优雅方式)。
catch_except.rb
catch(:finished) {
print( 'Enter a number: ' )
num = gets().chomp.to_i
begin
result = 100 / num
rescue Exception => e
throw :finished # jump to end of block
end
puts("The result of that calculation is #{result}" )
} # end of :finished catch block
有关 catch
和 throw
的更多信息,请参见第 6 章。