Вопрос

Мне нужно создать смешное 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 # код, вы почти никогда не сталкиваетесь с этой проблемой).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top