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代码使程序运行速度提高的例子,文中引用的项目把一个Ruby项目的运行时间从20秒优化到1.5秒,效果非常明显,需要的朋友可以参考下
    2015-04-04
  • win7下从ruby源代码编译安装的方法

    win7下从ruby源代码编译安装的方法

    下面小编就为大家带来一篇win7下从ruby源代码编译安装的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • ruby执行周期性任务的三种gem介绍

    ruby执行周期性任务的三种gem介绍

    无论是用ruby做系统管理,还是用rails做web开发,都可能遇到周期性任务,它们按照一定时间周期(1小时,2天......)持续地触发。在ruby中,我认为一次性任务使用 sidekiq 来完成是非常方便的,而周期性的任务就需要用到 whenever , sidetiq , clockwork 等等gem了。
    2014-07-07
  • Ruby下WebDriver的相关操作指南

    Ruby下WebDriver的相关操作指南

    这篇文章主要介绍了Ruby下WebDriver的相关操作指南,同时也介绍了启动firefox drive加载firebug扩展的方法,需要的朋友可以参考下
    2015-07-07
  • Ruby程序中正则表达式的基本使用教程

    Ruby程序中正则表达式的基本使用教程

    和Python与Perl一样,Ruby对正则表达式的支持也是相当好的,这里送出整理的Ruby程序中正则表达式的基本使用教程,需要的朋友可以参考下
    2016-05-05
  • ruby 小脚本搞定CVS服务器更换后checkout下来的工程迁移

    ruby 小脚本搞定CVS服务器更换后checkout下来的工程迁移

    CVS换了新的服务器,原来的工程需要更改Server配置,这个东东手工做起来 可是个体力活,写了一个脚本分发下来。
    2008-12-12
  • ruby实现的文件自删除代码分享

    ruby实现的文件自删除代码分享

    这篇文章主要介绍了ruby自删除代码分享,本文代码适用Linux系统,Windows系统需要自测一下哈,需要的朋友可以参考下
    2015-01-01
  • Ruby on Rails下的图像处理入门教程

    Ruby on Rails下的图像处理入门教程

    这篇文章主要介绍了Ruby on Rails下的图像处理入门教程,主要讲到如何用Rail的ImageMagick库来压缩图片,需要的朋友可以参考下
    2015-04-04
  • 浅析Ruby中的DATA对象

    浅析Ruby中的DATA对象

    这篇文章主要介绍了Ruby中的DATA对象,包括对DATA.read方法的讲解等,需要的朋友可以参考下
    2015-05-05

最新评论