Exception handling 告诉F#reraise不返回值
如何帮助F#编译器将重新引发异常解释为没有返回值Exception handling 告诉F#reraise不返回值,exception-handling,f#,rethrow,Exception Handling,F#,Rethrow,如何帮助F#编译器将重新引发异常解释为没有返回值 例如,考虑包装一个操作来记录异常: let doDivision() = try 2 / 0 with ex -> log ex reraise 编译器报告此错误,以便重新编译: 此表达式的类型应为int,但此处的类型为unit->'a “重新播放”是一个函数。你需要把单位传给它 let doDivision() = try 2 / 0 wit
例如,考虑包装一个操作来记录异常:
let doDivision() =
try
2 / 0
with ex ->
log ex
reraise
编译器报告此错误,以便重新编译:
此表达式的类型应为int
,但此处的类型为unit->'a
“重新播放”是一个函数。你需要把单位传给它
let doDivision() =
try
2 / 0
with ex ->
log ex
reraise ()
它不能有“无返回值”,因为
try
和with
分支将有不同的类型。它需要具有与try
分支相同的返回类型,即int
。这是编译器通过“此表达式应具有int类型”告诉您的。如果我理解正确,reraise将返回'T
,它将变为int
,以匹配try
表达式。确切地说……。unit->“a
是不带参数(unit,()
)的函数类型。这样,您就可以很容易地猜到您忘记调用该函数了。返回值是'a
,也就是您想要的任何东西。