[英]why does F# failwith return a generic type rather than Exception type
文档并没有说failwith
返回Exception
。 它说它会产生一个F#异常。 异常系统与返回值的正常控制流分开。 因此这个名字,它是特殊的 。
例外情况,当“抛出”(这是一个比文档中使用的“生成”更不模糊的术语,我认为),将在堆栈中向上移动,直到遇到try ... with
处理此特定类型的异常的构造,或者如果没有将终止该程序。 有关详细信息,请参阅有关异常处理的F#文档 。
failwith
返回'a
以便它可以在任何地方使用,因为'a
可以被推断为任何东西。 它可以假装返回任何内容,因为它根本不会实际返回,与大多数函数不同,它总是抛出异常。 如果它已经返回Exception
那么它只能用于期望评估为Exception
表达式中,这种情况异常罕见,因为通常会抛出异常,而不会返回异常。 例如,给定:
if i > 0 then
i
else
failwith "i is negative"
如果failwith
返回了Exception
,那么编译器会在这里抱怨一个int
被期望而不是Exception
因为第一个分支的计算结果为int
。 但是因为failwith
返回一个'a
而不是,它被推断为一个int
本身,一切都很好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.