如何创建F#可变选项类型?
答
您需要明确说明的类型,以避免"the Value Restriction"(或见"Automatic Generalization" on msdn):
let x : Ref<int option> = ref None
x := Some 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#代码中,您几乎不会遇到此问题),则您可能不需要任何类型注释。
只是想知道,但为什么你会需要一个可变选项? – Juliet 2010-03-06 16:08:15