【问题标题】:F#: What is the difference between module let and type static let?F#:module let 和 type static let 有什么区别?
【发布时间】:2010-08-16 03:31:20
【问题描述】:

鉴于以下情况:

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

【问题讨论】:

  • 你能open你的MyType吗?

标签: f# static module singleton types


【解决方案1】:

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

【讨论】:

  • 好主意,布赖恩。我试过了,在 () 构造函数中插入了对 System.Windows.MessageBox.Show(string) 的调用。当我将 MyModule.myObj 或 MyType.myObj 分配给一个值时,消息框没有出现;它仅在单例初始化时出现,因此看起来这两种方法确实是等效的。感谢您的建议!
【解决方案2】:

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

虽然有一个小的(理论上的)差异。使用静态 let,只保证在第一次使用 MyType 之前创建对象 (MSDN)。

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

【讨论】:

    猜你喜欢
    • 2013-09-22
    • 1970-01-01
    • 2022-07-21
    • 2014-09-07
    • 1970-01-01
    • 2010-10-20
    相关资源
    最近更新 更多