Class F#类型何时需要使用new进行初始化?
给定一个类,例如:Class F#类型何时需要使用new进行初始化?,class,f#,constructor,Class,F#,Constructor,给定一个类,例如: type MyClass() = member this.Greet(x) = printfn "Hello %s" x 使用初始化实例是否合适 let x = new MyClass() 或者没有新的 另外,什么时候使用new构造函数比使用提供给类型定义的参数绑定的do更有用?F中的我的模式用于使用new是仅在类型实现IDisposable时才这样做。如果省略了new,编译器将使用这种特殊情况并发出警告 因此,在您的情况下,我不会使用new。但有了以下几点,我会
type MyClass() =
member this.Greet(x) = printfn "Hello %s" x
使用初始化实例是否合适
let x = new MyClass()
或者没有新的
另外,什么时候使用new
构造函数比使用提供给类型定义的参数绑定的do
更有用?F中的我的模式用于使用new是仅在类型实现IDisposable
时才这样做。如果省略了new
,编译器将使用这种特殊情况并发出警告
因此,在您的情况下,我不会使用new
。但有了以下几点,我会
type OtherClass() =
...
interface System.IDisposable with
member this.Dispose() = ...
let x = new OtherClass()
F#规格:
68
6.5.2对象构造表达式
形式为newty(e1…en)的表达式是对象构造表达式,通常通过调用类型的构造函数方法来构造类型的新实例
14.2.2项目限定查找
对象构造ty(expr)作为对象构造函数调用进行处理,就好像它是由新的ty(expr)编写的一样
如果使用Ty()语法创建实现IDisposable的类型的实例时省略了new关键字,F#编译器将发出警告。Spec没有说明这一事实,但我认为应该明确指出。我想知道为什么会出现这种情况。使用
use
关键字不是很清楚吗?@ChaosPandion,真的不知道。我相信布赖恩很快就会提供完整的信息history@ChaosPandion:在某些情况下,您不希望使用use绑定创建新的IDisposable,例如您希望它转义创建它的函数。我几乎总是说new
。我认为如果你有一个与类同名的函数,那么你需要new
来消除歧义。我不知道这里有什么风格指南。@Brian,为什么F#编译器选择强制执行这个特定的案例?另请参见: