Когда нужно инициализировать тип F# с помощью new?

Учитывая класс, такой как:

type MyClass() =
    member this.Greet(x) = printfn "Hello %s" x

уместно ли инициализировать экземпляры, используя

let x = new MyClass()

или без new?

Кроме того, когда использование new Конструктор более полезен, чем do привязка с параметрами, указанными в определении типа?

2 ответа

Решение

Мой шаблон в F# для использования new должен делать это только тогда, когда тип реализует IDisposable, Компилятор в особых случаях это использует и выдает предупреждение, если new опущен

Так что в вашем случае я бы не использовал new, Но со следующим я бы

type OtherClass() =
  ...
  interface System.IDisposable with 
    member this.Dispose() = ...

let x = new OtherClass()

F# spec:

68 6.5.2 Выражения конструирования объекта Выражение вида new ty(e1 ... en) является выражением конструирования объекта и создает новый экземпляр типа, обычно вызывая метод конструктора для типа.

14.2.2 Элемент-квалифицированный поиск Конструкция объекта ty(expr) обрабатывается как вызов конструктора объекта, как если бы он был записан как новый ty(expr).

Компилятор F# выдает предупреждение, если экземпляр типа, который реализует IDisposable, создается с синтаксисом Ty(), опускающим новое ключевое слово. Спецификация ничего не говорит об этом факте, однако я думаю, что следует упомянуть определенность.

Другие вопросы по тегам