何时需要使用new初始化F#类型?

时间:2010-08-03 17:11:54

标签: class f# constructor

给出如下课程:

type MyClass() =
    member this.Greet(x) = printfn "Hello %s" x

是否适合使用

初始化实例
let x = new MyClass()

或没有new

此外,何时使用new构造函数比提供给类型定义的参数的do绑定更有用?

2 个答案:

答案 0 :(得分:8)

我在F#中使用new的模式只有在类型实现IDisposable时才这样做。这使用的编译器特殊情况如果省略new则发出警告。

所以在你的情况下我不会使用new。但是以下我会

type OtherClass() =
  ...
  interface System.IDisposable with 
    member this.Dispose() = ...

let x = new OtherClass()

答案 1 :(得分:4)

F#spec:

  

<强> 68   6.5.2对象构造表达式   形式new ty(e1 ... en)的表达式是一个对象构造表达式,它通常通过调用类型的构造函数方法来构造一个类型的新实例。

     

14.2.2项目合格查找   对象构造ty(expr)作为对象构造函数调用处理,就像它已写入新的ty(expr)一样。

如果使用省略 new 关键字的Ty()语法创建实现IDisposable的类型实例,则F#编译器会发出警告。 Spec没有说明这个事实,但是我认为应该提到它的确定性。