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