gpt4 book ai didi

.net - 在 F# 中。是否可以重载抽象类型的构造函数?

转载 作者:行者123 更新时间:2023-12-04 21:27:02 28 4
gpt4 key购买 nike

如果是,您能否举一个具有无参数和“全参数”构造函数的类型的示例。

这是您推荐使用的东西,还是 F# 提供了一些替代的更实用的方式。如果是的话,你能举一个例子吗?

最佳答案

像这样?

type MyType(x:int, s:string) =
public new() = MyType(42,"forty-two")
member this.X = x
member this.S = s

let foo = new MyType(1,"one")
let bar = new MyType()
printfn "%d %s" foo.X foo.S
printfn "%d %s" bar.X bar.S

这是典型的做法。将“最有参数”的构造函数作为隐式构造函数,并将其余的"new"重载定义为类中调用隐式构造函数的成员。

编辑

Beta2 中有一个关于抽象类的错误。在某些情况下,您可以使用隐式构造函数的默认参数来解决它,一个 la
[<AbstractClass>]
type MyType(?cx:int, ?cs:string) =
let x = defaultArg cx 42
let s = defaultArg cs "forty-two"
member this.X = x
member this.S = s
abstract member Foo : int -> int

type YourType(x,s) =
inherit MyType(x,s)
override this.Foo z = z + 1

type TheirType() =
inherit MyType()
override this.Foo z = z + 1

let foo = new YourType(1,"one")
let bar = new TheirType()
printfn "%d %s" foo.X foo.S
printfn "%d %s" bar.X bar.S

关于.net - 在 F# 中。是否可以重载抽象类型的构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1689424/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com