ruby-on-rails – 返回false与在Ruby中引发异常 – 何时以及为何
发布时间:2020-12-17 03:56:01 所属栏目:百科 来源:网络整理
导读:我对以下概念感到困惑: 不要将异常用作控制流 不要将nil / false作为例外返回 假设我有以下实例方法: class Logo # This method has some logic to create an image using Rmagick def process begin @logo_image = RmagickHelper.new(self.src) rescue Ma
我对以下概念感到困惑:
>不要将异常用作控制流 假设我有以下实例方法: class Logo # This method has some logic to create an image using Rmagick def process begin @logo_image = RmagickHelper.new(self.src) rescue Magick::ImageMagickError raise Exceptions::LogoUnprocessable,"ImageMagick can't process the URL" end end end 因此,在更通用的方法中,我有以下内容: def build_all_images begin @logo.process rescue Exceptions::LogoUnprocessable @logo.status = 'unprocessable' return false #This terminates the method so no more stuff is processed,because logo could not be processed. end #.... end 我的问题是: 这样做是否正确: raise Exceptions::LogoUnprocessable,"ImageMagick can't process the URL" 或者我应该刚做完 return false 解决方法
曾几何时,有一种没有异常结构的语言(
c).每条消息返回一个整数 – 0表示成功,或者一些错误代码表示失败.如果来电者在继续之前没有检查返回代码 – 他会被搞砸.此外,大多数时候调用者对失败没有任何帮助,所以即使他确实检查了结果 – 他唯一能做的聪明的事情就是返回自己的错误代码……
然后是c++,带有异常结构,仅用于这些用例.对于方法陷入无法处理的情况(例如,读取不存在的文件,或在没有Internet连接的情况下浏览网页),会出现例外情况. 滥用Exception构造意味着在完全预期的情况下引发异常,例如: def even? if (self % 2 != 0) raise NumberNotEvenException end end 在这里,一个奇数是合法的,并且是预期的;抛出错误是滥用异常构造. 当方法无法履行承诺时,抛出异常. 另一方面 – 当方法失败时返回nil或false会让我们回到快乐的c天,呼叫者注意到失败的负担,并弄清楚出了什么问题 – 不好玩. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |