Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Exception handling 告诉F#reraise不返回值_Exception Handling_F#_Rethrow - Fatal编程技术网

Exception handling 告诉F#reraise不返回值

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

如何帮助F#编译器将重新引发异常解释为没有返回值

例如,考虑包装一个操作来记录异常:

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
,也就是您想要的任何东西。