[英]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.