给出如下课程:
type MyClass() =
member this.Greet(x) = printfn "Hello %s" x
是否适合使用
初始化实例let x = new MyClass()
或没有new
?
此外,何时使用new
构造函数比提供给类型定义的参数的do
绑定更有用?
答案 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没有说明这个事实,但是我认为应该提到它的确定性。