ruby 异常处理:ensure

 更新时间:2007年11月24日 14:22:03   作者:  
 当一个方法结束工作时我们也许需要进行清理工作.也许一个打开的文件需要关闭,缓冲区的数据应清空等等.如果对于每一个方法这里永远只有一个退出点,我们可以心安理得地将我们的清理代码放在一个地方并知道它会被执行;但一个方法可能从多个地方返回,或者因为异常我们的清理代码被意外跳过.

begin
  file = open("/tmp/some_file", "w")
  # ... write to the file ...
  file.close
end  


上面,如果在我们写文件的时候发生异常,文件会保留打开.我们也不希望这样的冗余出现:

begin
  file = open("/tmp/some_file", "w")
  # ... write to the file ...
  file.close
rescue
  file.close
  fail # raise an exception
end  


这是个笨办法,当程序增大时,代码将失去控制,因为我们必须处理每一个 return 和 break,.

为此,我们向"begin...rescue...end"体系中加入了一个关键字 ensure. 无论begin块是否成功,ensure代码域都将执行.

begin
  file = open("/tmp/some_file", "w")
  # ... write to the file ...
rescue
  # ... handle the exceptions ...
ensure
  file.close   # ... and this always happens.
end  


可以只用ensure或只用rescue,但当它们在同一begin...end域中时, rescue 必须放在 ensure前面.  
 

相关文章

  • 关于Ruby on Rails路由配置的一些建议

    关于Ruby on Rails路由配置的一些建议

    这篇文章主要介绍了关于Ruby on Rails路由配置的一些建议,作者提出了相关代码编写时一些值得注意的地方,需要的朋友可以参考下
    2015-08-08
  • Ruby实现的矩阵连乘算法

    Ruby实现的矩阵连乘算法

    这篇文章主要介绍了Ruby实现的矩阵连乘算法,本文直接给出实现代码,需要的朋友可以参考下
    2015-05-05
  • Ruby实现的各种排序算法

    Ruby实现的各种排序算法

    这篇文章主要介绍了Ruby实现的各种排序算法,本文给出了Bubble sort、Insertion sort、Selection sort、Shell sort等排序的实现方法,需要的朋友可以参考下
    2015-05-05
  • Ruby最简单的消息服务器代码

    Ruby最简单的消息服务器代码

    这篇文章主要介绍了Ruby最简单的消息服务器,大家参考使用
    2013-11-11
  • Ruby编写HTML脚本替换小程序的实例分享

    Ruby编写HTML脚本替换小程序的实例分享

    这篇文章主要介绍了Ruby编写HTML脚本替换小程序的实例分享,单纯使用Ruby中的字符串替换方法而没有涉及更复杂的正则表达式,需要的朋友可以参考下
    2016-05-05
  • Ruby中的block、proc、lambda区别总结

    Ruby中的block、proc、lambda区别总结

    这篇文章主要介绍了Ruby中的block、proc、lambda区别总结,本文讲解了yield 和 block call 的区别、block 和 proc、lambda 的区别、proc 和 lambda 的区别,需要的朋友可以参考下
    2015-03-03
  • Ruby中操作文件的方法介绍

    Ruby中操作文件的方法介绍

    这篇文章主要介绍了Ruby中操作文件的方法介绍,是Ruby学习当中的基础知识,需要的朋友可以参考下
    2015-05-05
  • Ruby中的异常处理代码编写示例

    Ruby中的异常处理代码编写示例

    这篇文章主要介绍了Ruby中的异常处理代码编写示例,作者对异常处理的方式给出了一些比较通用的建议,需要的朋友可以参考下
    2015-08-08
  • Ruby中嵌套对象转换成json的方法

    Ruby中嵌套对象转换成json的方法

    这篇文章主要介绍了Ruby中嵌套对象转换成json的方法,同时介绍了普通对象to_json的方法,需要的朋友可以参考下
    2014-06-06
  • 使用Ruby来处理文本的教程

    使用Ruby来处理文本的教程

    这篇文章主要介绍了使用Ruby来处理文本的教程,本文来自于IBM官方网站技术文档,需要的朋友可以参考下
    2015-04-04

最新评论