2017-02-21 13 views
2

Как мне помочь компилятору F # интерпретировать повторное бросание исключения как не имеющего возвращаемого значения?Скажите F #, что ререйз не возвращает значение

Для примера рассмотрим оберточной операцию регистрировать исключение:

let doDivision() = 
    try 
     2/0 
    with ex -> 
     log ex 
     reraise 

Доклады компилятора эта ошибка для reraise:

Это выражение, как ожидается, иметь тип int но здесь имеет тип unit -> 'a

+0

У него не может быть «никакого возвращаемого значения», потому что тогда ветви 'try' и' with' будут иметь разные типы. Он должен иметь тот же тип возврата, что и ветвь 'try', а именно' int'. Это то, что компилятор говорит вам, «это выражение должно было иметь тип int_». –

+0

Если я правильно понимаю, ререйз возвращает '' T', который становится 'int' в соответствии с выражением' try'. –

+0

Точно ........ –

ответ

7

«ререйз» - это функция. Вам нужно передать ему единицу.

let doDivision() = 
    try 
     2/0 
    with ex -> 
     log ex 
     reraise() 
+3

О, глупо меня. :-) –

Смежные вопросы