gpt4 book ai didi

ruby-on-rails - 返回 false 与在 Ruby 中引发异常 - 何时以及为什么?

转载 作者:数据小太阳 更新时间:2023-10-29 07:23:46 24 4
gpt4 key购买 nike

我对以下概念真的很困惑:

  • 不要将异常用作控制流
  • 不要作为异常返回 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

最佳答案

曾几何时,有一种语言没有异常结构 ()。每条消息返回一个整数 - 0 表示成功或一些错误代码表示失败。如果调用者在继续之前没有检查返回码——他就完蛋了。此外,大多数时候调用者对失败无能为力,所以即使他确实检查了结果 - 他做的唯一明智的事情就是返回它自己的错误代码...

然后是 ,具有异常构造,仅适用于这些用例。该方法遇到无法处理的情况时会出现异常(exception)情况(例如读取不存在的文件,或在没有互联网连接的情况下上网冲浪)。

滥用 Exception 构造意味着在完全预期的情况下引发异常,例如:

def even?
if (self % 2 != 0)
raise NumberNotEvenException
end
end

在这里,奇数是合法的,也是意料之中的;抛出错误是滥用异常结构。

当方法不能完成它 promise 的事情时抛出异常。

另一方面 - 当方法失败时返回 nilfalse 让我们回到快乐的 几天来,调用者的负担是注意到失败并弄清楚出了什么问题——这并不好玩。

关于ruby-on-rails - 返回 false 与在 Ruby 中引发异常 - 何时以及为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23815147/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com