Необязательный параметр - это синтаксис, который удобен для пользователей библиотеки, но не для авторов библиотеки. Вы стоите на точке зрения авторов библиотеки, чтобы судить об этой функции. Чем динамичнее интерфейс, тем больше проверок в базовой реализации.

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

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 не.

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