如何创建F#mutable选项类型?

时间:2010-03-05 10:20:56

标签: f# types option mutable

我需要在F#中创建一个可变的option<T>类型。我试过写

let x = ref None

随后写作

x := Some(z)

但它不起作用。救命啊!

2 个答案:

答案 0 :(得分:7)

您需要明确说明类型以避免"the Value Restriction"(或参见"Automatic Generalization" on msdn):

let x : Ref<int option> = ref None

x := Some 4

答案 1 :(得分:4)

另请注意,只有在F#interactive in-line中逐行输入代码时才会遇到此问题。如果您在不提供类型注释的情况下输入第一行,则会收到错误:

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

但是,如果你输入一个更大的使用x ref单元格的代码(例如为它赋值),那么F#将能够从代码的后面部分推断出类型,所以你不需要任何类型的注释。例如:

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

这样可以正常工作,因为F#会从第二行推断出x的类型。这意味着你可能不需要任何类型的注释,如果你将代码发送到F#进行大量测试(在编译的F#代码中,你几乎不会遇到这个问题)。