加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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
我对以下概念感到困惑:

>不要将异常用作控制流
>不要将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 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天,呼叫者注意到失败的负担,并弄清楚出了什么问题 – 不好玩.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读