When `new` is not optional?

时间:2017-12-18 06:22:48

标签: .net f# functional-programming

I have to use new to create new instances of dynamically created, anonymous object types that are based on existing base types, or interfaces, using object expressions:

let a = { new System.Object() with member x.ToString() = "F#" }

But in other cases, for example computation expressions, I don't have to write new at all:

type MaybeBuilder() =
    member this.Bind(x, f) = match x with
                             | None -> None
                             | Some a -> f a
    member this.Return(x) = Some x

let maybe = new MaybeBuilder()
ley maybe2 = MaybeBuilder()

I'd like to ask, when is new not an optional to write?

1 个答案:

答案 0 :(得分:1)

您的两个示例使用完全不同的语言功能,即使它们使用相同的new关键字。

您永远不需要使用new来调用构造函数,就像在第二个示例中一样(与您必须使用它的C#相比)。

但在F#中,new关键字也用于对象表达式功能,如第一个示例所示。这是需要的,因为F#中的花括号有不同的用途。编译器只知道您正在编写对象表达式,因为它看到{ new