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

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

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

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

let x = new MyClass()

или без new?

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

Ответы [ 2 ]

8 голосов
/ 03 августа 2010

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

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

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

let x = new OtherClass()
4 голосов
/ 03 августа 2010

F # spec:

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

14.2.2 Item-Qualified Lookup Объектная конструкция ty (expr) обрабатывается как вызов конструктора объекта какесли было написано new ty (expr).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...