Необязательные параметры и типы опций с использованием F #

Рассмотрим следующий код:

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, но здесь есть тип 'a option

MSDN заявляет:

Дополнительные параметры интерпретируются как тип параметра F #, поэтому вы можете запрашивать их обычным способом, как запрашиваются типы параметров, используя выражение соответствия с Some и None.

Для меня необязательные параметры не интерпретируются как тип параметра F #, иначе код будет компилироваться. Более того, я не понимаю, почему при наведении курсора на ? Bo в fn3 всплывающая подсказка говорит val bo: int option , но извне ожидает только int . Я ожидал, что ничего не будет принимать, int, Some int и None. И последнее примечание: я не понимаю, почему fn2 работает, а fn4 - нет.

Спасибо за пояснение

14
задан Oldrich Svec 15 June 2011 в 06:29
поделиться