【问题标题】:How do I create an F# mutable option type?如何创建 F# 可变选项类型?
【发布时间】:2010-03-05 10:20:56
【问题描述】:

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

let x = ref None

然后写

x := Some(z)

但它不起作用。救命!

【问题讨论】:

  • 只是想知道,但为什么你需要一个可变选项?

标签: f# types option mutable


【解决方案1】:

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

let x : Ref<int option> = ref None

x := Some 4

【讨论】:

    【解决方案2】:

    另请注意,只有在 F# 交互式逐行输入代码时才会遇到此问题。如果你在没有提供类型注释的情况下输入第一行,你会得到错误:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-09-15
      • 1970-01-01
      • 2023-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-29
      相关资源
      最近更新 更多