鉴于以下内容:
module MyModule =
let myObj = new MyObj()
type MyType() =
static let myObj_ = new MyObj()
static member myObj = myObj_
... MyModule.myObj和MyType.myObj在功能上(没有双关语意)相当于?
每当我调用MyModule.myObj或MyType.myObj时,我都不希望代码实际创建新对象。我只想访问单例对象上的方法。我希望上述任何一个都适合这个目的。
答案 0 :(得分:4)
试试看?我认为这些是相同的,但我认为你可以使用构造函数创建一个MyObj类型,该构造函数可以打印一些东西,然后通过一个简短的测试程序轻松验证行为。 (或者你可能会问一些我不清楚的事情。)
答案 1 :(得分:1)
在这两种情况下,对象肯定只创建一次。
虽然存在一些小的(理论上的)差异。使用静态let,只保证在第一次使用MyType之前创建对象(MSDN)。
模块级let绑定可能在程序启动时执行(或者可能在首次使用模块时执行?)。