gpt4 book ai didi

ruby - 如何在 Ruby 中返回值或有条件地引发错误?

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

我正在从 Rails 模型调用 API,如果 API 在非 200 代码上返回,我想引发错误。否则我想缓存/延迟加载数据。这是我的方法:

def data
@data ||= SNL.get_list(name)
raise StandardError, @data.inspect unless @data.success?
@data
end

这行得通,但我想知道我是否可以在一行中完成此操作。我尝试将 and 运算符与 unless 结合使用,但无法正常工作。

更新:我接受了 tokland 的回答,因为我要求一条线,他/她提供了两个非常好的解决方案。最后我实际上要使用

def data
@data ||= SNL.get_list(name)
@data.success? ? @data : (raise StandardError, @data.inspect)
end

为了可读性。我只是讨厌第三行只是为了返回 @data,因为很少会引发异常。我觉得 odiszapc 的回答是简洁性和可读性的最佳折衷。谢谢大家。

最佳答案

我不会费力地写一个单行代码,但是如果你绝对必须的话,你可以使用 tap:

def data
(@data ||= SNL.get_list(name)).tap { |d| d.success? or raise StandardError.new(d.inspect) }
end

还有短路逻辑:

def data
(@data ||= SNL.get_list(name)).success? && @data or
raise StandardError.new(@data.inspect) }
end

关于ruby - 如何在 Ruby 中返回值或有条件地引发错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11114131/

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