文档没有说failwith返回Exception。它说它生成一个F#异常。异常系统与返回值的常规控制流是分开的。因此,这个名字很特别。
当“抛出”(我认为这比文档中使用的“生成的”这个词要模糊的术语)少时,异常会沿栈向上移动,直到遇到try ... with处理这种特殊类型异常的构造为止;否则,它将终止程序。有关详细信息,请参见有关异常处理的F#文档。
failwith返回,'a以便可以在任何地方使用,因为'a可以推断为任何东西。它可以假装返回任何东西,因为它实际上根本不返回任何东西,与大多数函数不同,它总是抛出异常。如果它已返回,Exception则只能在期望计算为的表达式中使用Exception,这是非常不寻常的,因为通常会抛出异常,而不返回。例如,给定:
if i > 0 then
i
else
failwith "i is negative"
Run Code Online (Sandbox Code Playgroud)
如果failwith已返回Exception,则编译器将在此处抱怨int 期望值而不是期望值,Exception因为第一个分支的计算结果为int。但是由于failwith返回了a 'a,因此可以推断为int本身,一切都很好。
| 归档时间: |
|
| 查看次数: |
150 次 |
| 最近记录: |