好的,为了使复杂的标题更清楚:我有一个单例联合,它是一个通用元组。该类型还会使相等运算符过载,以进行类似于Edge (1, 2)等价的操作Edge (2, 1)。
type Edge<'a> = Edge of 'a * 'a
with
static member (=) (e1: Edge<_>, e2: Edge<_>) =
match e1, e2 with
| Edge(a,b), Edge(c,d) ->
(a = c && b = d) || (a = d && b = c)
Run Code Online (Sandbox Code Playgroud)
但是,当我制作两个应该相等的Edge类型的值并进行比较时,它返回false。
> let e1 = Edge (1,2);;
val e1 : Edge<int> = Edge (1,2)
> let e2 = Edge (2,1);;
val e2 : Edge<int> = Edge (2,1)
> e1 = e2;; …Run Code Online (Sandbox Code Playgroud) .net f# functional-programming equality operator-overloading