2010-03-05 4 views
4

Мне нужно создать изменяемый тип option<T> в F #. Я пробовал писатьКак создать тип опции F # mutable?

let x = ref None 

, а затем писать

x := Some(z) 

, но он не работает. Помогите!

+0

Просто интересно, но зачем вам когда-либо понадобился измененный вариант? – Juliet

ответ

4

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

> let x = ref None;; 
// Tests.fsx(1,7): error FS0030: Value restriction. 

Однако, если вы вводите большую porition кода, который использует x реф ячейку (например, присваивает ему значение) то F # сможет вывести тип из более поздней части кода, поэтому вам не понадобятся аннотации типов. Например:

> let x = ref None 
    x := Some(10);; 

Это будет работать нормально, потому что F # будет определить тип x от второй линии. Это означает, что вам, вероятно, не нужны аннотации типов, если вы будете отправлять код в F # в интерактивном режиме для тестирования большими порциями (и в скомпилированном коде F # вы почти никогда не столкнетесь с этой проблемой).