4

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

let x = ref None

然后写

x := Some(z)

但它不起作用。帮助!

4

2 回答 2

7

您需要明确说明类型以避免“值限制”(或参见msdn 上的“自动泛化”):

let x : Ref<int option> = ref None

x := Some 4
于 2010-03-05T13:02:08.713 回答
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# 代码中,您几乎永远不会遇到这个问题)。

于 2010-03-05T13:41:31.597 回答