Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 什么时候“new”不是可选的?_.net_F#_Functional Programming - Fatal编程技术网

.net 什么时候“new”不是可选的?

.net 什么时候“new”不是可选的?,.net,f#,functional-programming,.net,F#,Functional Programming,我必须使用new创建基于现有基本类型或接口的动态创建的匿名对象类型的新实例,使用对象表达式: let a = { new System.Object() with member x.ToString() = "F#" } 但在其他情况下,例如计算表达式,我根本不需要编写new: type MaybeBuilder() = member this.Bind(x, f) = match x with | None -> Non

我必须使用
new
创建基于现有基本类型或接口的动态创建的匿名对象类型的新实例,使用对象表达式:

let a = { new System.Object() with member x.ToString() = "F#" }
但在其他情况下,例如计算表达式,我根本不需要编写
new

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()

我想问一下,什么时候
new
不是一个可选的写作工具?

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

您永远不需要使用
new
来调用构造函数,如第二个示例所示(与必须使用构造函数的C#相反)


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

此函数的可能重复项不是重复项,因为它涉及对象表达式-另一个答案不是。除非调用实现
IDisposable
的类的构造函数,在这种情况下,省略
new
会导致警告(在链接问题中提到)。