gpt4 book ai didi

ruby - 在函数中捕获参数错误?

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

方法是否可以处理参数中发生的错误?

例如

def add(arg1, arg2)
# If the value causes an error, turn it into 0
rescue nil
0
end
arg1 + arg2
end

add(2, 2+nil) => 2

我知道屏蔽参数并稍后对其进行评估可能是一种解决方案,但在我的场景中,这样做太麻烦了。

最佳答案

此问题是错误发生在您提供参数的行上,因为参数是在被调用的方法之前求值的。

每个方法调用大致等同于:

arg1 = 2
arg2 = 2 + nil

add(arg1, arg2)

在这种情况下,您可以看到参数本身是如何产生错误的。推迟参数评估的唯一方法是通过 block :

add(2) do
2 + nil
end

将您的定义更改为:

def add(v)
v + yield

rescue
v + 0
end

盲目地捕获所有异常通常是一个非常糟糕的计划,你可能在其中犯了某种根本性错误。最好避免捕获异常,除非您对异常的类型有预期。

这是一个没有异常处理的方法版本:

def add(*args)
args.map(&:to_i).inject(:+)
end

现在 nil.to_i 返回 0 所以你被覆盖了:

add(2,2,nil)

这将在内部评估为 2+2+0

通常,尝试掩埋 2+nil 之类的错误是一个糟糕的计划。这是一个应该解决的根本错误。如果你想处理 nil 值,你可以使用 .to_i 将它们映射到可用的东西。

关于ruby - 在函数中捕获参数错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38642937/

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