опция»unit> type и равенство 'используя F # - PullRequest
2 голосов
/ 15 июля 2011

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

let fnOption = Some (fun () -> ())
fnOption = None

выдает следующую ошибку:

init.fsx (2,1): ошибка FS0001: тип '(unit -> unit)' не поддерживает ограничение равенства, поскольку это тип функции

Почему это? Я что-то упустил?

Ответы [ 2 ]

2 голосов
/ 15 июля 2011

Если вы действительно хотите проверить равенство (а не присваивать значение), тогда вы можете использовать Option.isNone fnOption. Если вы действительно хотите назначить, посмотрите как ответ kvb.

2 голосов
/ 15 июля 2011

Неясно, что вы пытаетесь сделать. В нынешнем виде вторая строка представляет собой тест на равенство , а не присвоение . Если вы намеревались назначить новое значение для fnOption, то вам нужно сделать его изменяемым:

let mutable fnOption = Some(fun () -> ())
fnOption <- None

Если вы действительно пытаетесь проверить равенство, то ошибка, которую вы видите, является ожидаемым результатом, потому что функции несопоставимы.

...