Когда нужно инициализировать тип 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(), опускающим новое ключевое слово. Спецификация ничего не говорит об этом факте, однако я думаю, что следует упомянуть определенность.