如何清理if-else+返回值



在Ruby中编码时,我经常写这样的

def someopp(param)
r_val = nil
begin
r_val  = do_something(param)
rescue Some::Error => e
r_val  = {} 
end
r_val 
end

我不喜欢它的外观。声明返回变量,但实际上没有任何作用,然后只使用var名称再次返回一行。这很麻烦。我觉得,在Ruby中,一定有办法让它更干净、更漂亮。这里有关于句法糖的建议吗?

def someopp(param)
do_something(param)
rescue Some::Error
{} 
end

def someopp(param)
do_something(param) rescue {}
end

但不建议使用联机救援!

如果你真的经常做这件事(调用可能引发异常并回落到某个默认值的外部依赖项(,可以进一步推广:

def rescuing(*exceptions, with:)
yield
rescue *exceptions
with
end
value = rescuing(ZeroDivisionError, with: Float::INFINITY) { 3 / 0 }
# => Infinity

尽管如果可能的话,如果你能一开始就避免例外情况,那会更好。

最新更新