У меня проблема при возврате значений в сложных функциях.Примеры всегда лучше:
Рассмотрим следующую функцию:
let myf (mypar: int) =
mypar + 1
Ну, нет пробел здесь, эта функция скомпилирована правильно и подпись:
val myf: int -> int
OK, Что ж.Теперь рассмотрим этот код:
let myf (mypar: int) =
if mypar = 2 then
4 (* ERROR *)
mypar + 1
Это не работает:
Ожидается, что это выражение будет иметь тип блока, но здесь имеет int
Эта ошибка возникает каждый раз, когда я пытаюсьчтобы вернуться из моей функции, когда я нахожусь внутри if
, while
a for
или любого другого блока.Я думал, что проблема в том, что все возможные пути возврата возвращают один и тот же тип, но здесь я не понимаю, что происходит.
Обратите внимание, что если я вставляю модуль ()
, все работает, например:
let myf (mypar: int) =
if mypar = 2 then
() (* No error *)
mypar + 1
Но это устройство не возвращает мою функцию !!!это продолжается !!!Кроме того, не могли бы вы объяснить, как F # справляется с этим ???
Спасибо