gpt4 book ai didi

f# - 返回 Result 类型的异常

转载 作者:行者123 更新时间:2023-12-02 15:07:48 25 4
gpt4 key购买 nike

我正在尝试使用 F# 默认情况下的错误:异常。

我想用 Result 类型处理错误,但是如果我尝试返回一个异常的特化,比如 ArgumentException,作为错误,Visual Studio 会说“这个函数有太多的参数,或者在一个函数是没想到。

我的来源:

let division (x: float) (y: float): Result<float, Exception> =
if x = 0.0 then
Error (ArgumentException ())
else
Ok (x / y)

最佳答案

您的代码的问题是新创建的 ArgumentException 的类型与您在类型签名中指定的 Exception 类型不同。

您可以使用 :> 运算符将 ArgumentException 安全地转换为 Exception,但 F# 不会自动插入转换,因此您必须自己写:

let division (x: float) (y: float): Result<float, Exception> =
if x = 0.0 then
Error (ArgumentException () :> Exception)
else
Ok (x / y)

事实上,F#甚至可以从类型注解中推断出目标类型,所以你可以这样写:

Error (ArgumentException () :> _)

PS:我看到您是说您遇到了“该函数需要太多参数”的错误。这很奇怪,也许您的情况还有其他原因。当我尝试你的代码时得到的错误是“这个表达式应该有 Exception 类型但是是 ArgumentException”所以也许你也在重新定义一些标准类型。 ..

关于f# - 返回 Result 类型的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46121687/

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