【发布时间】:2010-08-03 17:11:54
【问题描述】:
给定一个类,例如:
type MyClass() =
member this.Greet(x) = printfn "Hello %s" x
使用初始化实例是否合适
let x = new MyClass()
或者没有new?
另外,什么时候使用new 构造函数比使用提供给类型定义的参数的do 绑定更有用?
【问题讨论】:
标签: class f# constructor
给定一个类,例如:
type MyClass() =
member this.Greet(x) = printfn "Hello %s" x
使用初始化实例是否合适
let x = new MyClass()
或者没有new?
另外,什么时候使用new 构造函数比使用提供给类型定义的参数的do 绑定更有用?
【问题讨论】:
标签: class f# constructor
我在 F# 中使用 new 的模式是仅在类型实现 IDisposable 时这样做。如果省略new,编译器会使用这种特殊情况并发出警告。
所以在你的情况下,我不会使用new。但是有了以下我会
type OtherClass() =
...
interface System.IDisposable with
member this.Dispose() = ...
let x = new OtherClass()
【讨论】:
use关键字不是很清楚吗?
new。我认为如果你有一个与类同名的函数,那么你需要new 来消除歧义。我不知道这里有任何风格指南。
F# 规范:
68 6.5.2 对象构造表达式 new ty(e1 ... en) 形式的表达式是一个对象构造表达式,它构造一个类型的新实例,通常通过调用该类型的构造方法。
14.2.2 项目限定查找 对象构造 ty(expr) 被当作对象构造函数调用处理,就好像它被写成 new ty(expr)。
如果使用省略 new 关键字的 Ty() 语法创建实现 IDisposable 的类型实例,F# 编译器会发出警告。 Spec 对这个事实只字未提,但我认为应该提到它的定义。
【讨论】: