如何覆盖方法 Zero
在下面的代码中,我可以返回 Euro(0)
用于 type Euro
中的定义
[<AbstractClass>]
type Currency () =
abstract member Zero<'T when 'T :> Currency > : unit -> 'T
type Euro (value: int) =
inherit Currency()
member this.Value = value
override this.Zero() = Euro(0) :> _
最佳答案
您是否尝试将通用约束提升到类级别?
[<AbstractClass>]
type Currency<'T when 'T :> Currency<'T>>() =
abstract member Zero : unit -> 'T
type Euro (value: int) =
inherit Currency<Euro>()
member this.Value = value
override this.Zero() = Euro(0)
虽然自引用泛型对我来说总是很奇怪,但这就是它在例如 C# 中的实现方式。
关于f# - 如何正确覆盖受约束的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42253991/