Как мне создать тип опции F # Mousable?
Вопрос
Мне нужно создать смешное option<T>
Введите f #. Я пробовал писать
let x = ref None
и впоследствии писать
x := Some(z)
Но это не работает. Помощь!
Решение
Вам нужно указать тип явно, чтобы избежать «Ограничение стоимости» (или увидеть «Автоматическое обобщение» на MSDN):
let x : Ref<int option> = ref None
x := Some 4
Другие советы
Также обратите внимание, что вы сталкиваетесь с этой проблемой только при входе в код в F # Interacation Line-By-Line. Если вы введете первую строку без предоставления аннотаций типа, вы получите ошибку:
> let x = ref None;;
// Tests.fsx(1,7): error FS0030: Value restriction.
Однако, если вы вводите большую порцию кода, который использует x
ref Cell (например, присваивает ему значение), то f # сможет выводить тип из более поздней части кода, поэтому вам не понадобится аннотации типа. Например:
> let x = ref None
x := Some(10);;
Это будет работать нормально, потому что F # будет выводит тип x
со второй строки. Это означает, что вам, вероятно, не должны нуждаться в аннотациях типа, если вы отправите код на f # в интерактивном режиме для тестирования в более крупных частях (и в скомпилированном F # код, вы почти никогда не сталкиваетесь с этой проблемой).