gpt4 book ai didi

exception - 为什么 F# failedwith 返回泛型类型而不是异常类型

转载 作者:行者123 更新时间:2023-12-02 22:33:47 25 4
gpt4 key购买 nike

根据docs failwith 函数返回异常但函数签名是 string -> 'a

为什么签名不是string -> Exception

最佳答案

文档没有说 failwith 返回 Exception。它说它生成一个F#异常。异常系统与返回值的正常控制流是分开的。因此得名,它与众不同

异常,当“抛出”(我认为这是一个比文档中使用的“生成”更明确的术语)时,将在堆栈中向上移动,直到遇到 try ... with构造处理这种特定类型的异常,否则将终止程序。请参阅the F# docs on exception handling了解详情。

failwith 返回 'a,因此它可以在任何地方使用,因为 'a 可以推断为任何内容。它可以假装返回任何内容,因为它实际上根本不会返回,与大多数函数不同,它总是抛出异常。如果它返回了Exception,则它只能在预期计算结果为Exception的表达式中使用,这种情况非常不寻常,因为通常会抛出异常,而不是返回异常。例如,给定:

if i > 0 then
i
else
failwith "i is negative"

如果 failwith 返回了 Exception,编译器会在这里提示需要 int 而不是 Exception > 因为第一个分支的计算结果为 int。但由于 failwith 返回一个 'a,因此它被推断为 int 本身,一切都很好。

关于exception - 为什么 F# failedwith 返回泛型类型而不是异常类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56722031/

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