Рассмотрим следующий код:
type Test () =
member o.fn1 (?bo) = 1
member o.fn2 (?bo) = o.fn1 bo
member o.fn3 (?bo) = 1 + bo.Value
member o.fn4 (?bo) = o.fn3 bo
Хотя fn1
и fn2
работают нормально, fn4
выдает следующую ошибку:
init.fsx (6,30): ошибка FS0001: ожидалось, что это выражение будет иметь тип int, но здесь имеет тип 'опция
MSDN состояния:
Необязательные параметры интерпретируются как тип опции F #, поэтому вы можете запрашивать их обычным образом, запрашивая типы опций, используя выражение соответствия с Some и None.
Для меня необязательные параметры не интерпретируются как тип опции F #, иначе код будет компилироваться.Более того, я не понимаю, почему при наведении курсора на ?bo
в fn3
всплывающая подсказка говорит val bo: int option
, но извне ожидает только int
.Я ожидал бы поведения принятия ничего, int, Some int и None.И как последнее замечание, я не понимаю, почему fn2
работает, но fn4
не работает.
Спасибо за разъяснения