F #: В чем разница между модулем let и типом static let? - PullRequest
2 голосов
/ 16 августа 2010

Учитывая следующее:

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, я не хочу, чтобы код фактически создавал новый объект. Я просто хочу получить доступ к методам объекта-одиночки. Я надеюсь, что любое из вышеперечисленного подходит для этой цели.

Ответы [ 2 ]

4 голосов
/ 16 августа 2010

Попробуй и увидишь?Я думаю, что это то же самое, но я думаю, что вы можете создать тип MyObj с помощью конструктора, который печатает что-то, а затем легко проверить поведение с помощью короткой тестовой программы.(Или, может быть, вы спрашиваете о чем-то еще, что мне неясно.)

1 голос
/ 16 августа 2010

В обоих случаях объект определенно создается только один раз.

Хотя есть небольшая (теоретическая) разница.При статическом let объект гарантированно будет создан только до того, как MyType будет использован впервые ( MSDN ).

Привязка let на уровне модуля, вероятно, выполняется при запуске программы (или, может быть, при первом использовании модуля?).

...