如何在具有静态解析类型参数的 F# 类型中实现自定义相等性方法?
我尝试了以下方法:
我尝试了以下方法:
[<CustomEqualityAttribute>]
type Fraction< ^a when ^a: equality and ^a : (static member (*): ^a * ^a -> ^a) > (nominator: ^a, denominator: ^a) =
member inline this.Nominator = nominator
member inline this.Denominator = denominator
member inline this.IsEqualTo(other: Fraction< ^a >) = this.Nominator * other.Denominator = other.Nominator * this.Denominator
override inline this.Equals(other: obj) =
match obj with
| :? Fraction< ^a > as f -> this.IsEqualTo(f)
| _ -> false
我在this.Equals
这一行遇到了以下错误:
此成员、函数或值声明可能不能声明为“inline”
为什么会出现这种情况?是因为Equals
是一个覆盖吗?如果是这种情况,是否有任何方法来实现自定义相等性,或者我必须使用IEqualityComparer
吗?
#nowarn "1125"
吗?(泛型类型 'Frac' 的实例化缺失,无法从该成员的参数或返回类型中推断出。在访问此类型时,请考虑提供类型实例化,例如 'Frac<_>'。) - kaefer