繁体   English   中英

F#:模块let和类型static let有什么区别?

[英]F#: What is the difference between module let and type static let?

给定以下内容:

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时,我都不希望代码实际创建一个新对象。 我只想访问单例对象上的方法。 我希望以上任何一种都适合该目的。

试试看吧? 我认为这些是相同的,但是我认为您可以使用构造函数来编写MyObj类型,该构造函数将打印出一些内容,然后使用简短的测试程序轻松验证行为。 (或者您可能正在问其他我不清楚的问题。)

在这两种情况下,对象肯定只创建一次。

但是,两者之间存在很小的(理论上的)差异。 使用静态let,只能保证在第一次使用MyType( MSDN )之前创建对象。

模块级别的let绑定可能是在程序启动时执行的(或者也许是在第一次使用模块时?)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM