gpt4 book ai didi

generics - 当您不关心返回值时,创建适应性强的泛型返回类型的首选方法是什么?

转载 作者:行者123 更新时间:2023-12-02 19:42:30 26 4
gpt4 key购买 nike

假设您要创建一个具有最终副作用(引发错误、退出程序、飞向月球)的函数,应遵循的正确模式是什么?我目前这样做:

let fastExit x =
match box x with
| null ->
System.Environment.FailFast("Something went terribly wrong, get out fast!")
Unchecked.defaultof<_> // adaptable generic return
| _ -> x

我经常遵循上述模式(尤其是与 CLR 的 BCL 交互),但从未真正想过这是否是 F# 的做事方式。显然,只有当您从不返回,或者您在执行代码时不必关心危险的返回值时,这才有效。

请注意,正如(现已删除)评论所建议的那样,这在可组合性和可链接性方面也有意义(即,使用 compose >> 和管道 |> 运算符)。

最佳答案

我会写这样的东西:

let fastExit x =
if isNull x then nullArg "x"
elif otherGenericCheck x then failwith "x Didn't pass other generic check"
// More generic checks
x

请注意,编译器已将 x 的类型限制为将 null 作为值。

如果您将其装箱,您将检查任何类型,包括那些内部使用 null 作为“有效”值表示的类型,这意味着如果您传递选项类型且其值为 没有它会失败。

所以拳击与否取决于此。

当然,如果唯一的检查是空检查,我根本不会编写这个函数,我想我们都同意这一点,除非存在您想要 T 的情况效果,例如使用 |> 链接多个函数时。

关于generics - 当您不关心返回值时,创建适应性强的泛型返回类型的首选方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41194379/

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