我需要option<T>
在 F# 中创建一个可变类型。我试过写
let x = ref None
然后写
x := Some(z)
但它不起作用。帮助!
您需要明确说明类型以避免“值限制”(或参见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.
但是,如果您输入使用 ref 单元格的较大部分代码x
(例如为其分配一个值),则 F# 将能够从代码的后面部分推断类型,因此您不需要任何类型注释. 例如:
> let x = ref None
x := Some(10);;
这可以正常工作,因为 F# 将从x
第二行推断出的类型。这意味着如果您将代码以交互方式发送到 F# 以进行较大部分的测试,您可能不需要任何类型注释(在编译的 F# 代码中,您几乎永远不会遇到这个问题)。