Когда тип F # нужно инициализировать с помощью нового?
Для класса, такого как:
type MyClass() =
member this.Greet(x) = printfn "Hello %s" x
целесообразно инициализировать экземпляры с помощью
let x = new MyClass()
или без new
?
Кроме того, когда используется конструктор new
, более полезный, чем привязка do
с параметрами, предоставленными определению типа?
Ответы
Ответ 1
Мой шаблон в F # для использования нового - это делать только тогда, когда тип реализует IDisposable
. Особые случаи компилятора используют и выдает предупреждение, если new
опущено.
Итак, в вашем случае я бы не использовал new
. Но со следующим я бы
type OtherClass() =
...
interface System.IDisposable with
member this.Dispose() = ...
let x = new OtherClass()
Ответ 2
F # spec:
68 6.5.2 Выражения построения объектовВыражение формы new ty (e1... en) является выражением построения объекта и строит новый экземпляр типа, обычно путем вызова метода конструктора в типе.
14.2.2 Проверка качества товараКонструкция объекта ty (expr) обрабатывается как вызов конструктора объекта, как если бы она была написана новой ty (expr).
Компилятор F # выдает предупреждение, если экземпляр типа, реализующий IDisposable, создается с синтаксисом Ty(), исключающим ключевое слово новое. Spec ничего не говорит об этом факте, однако я думаю, что следует упомянуть определенность.