小编Dul*_*lan的帖子

在具有元组的已区分联合上重载相等F#运算符会产生意外结果

好的,为了使复杂的标题更清楚:我有一个单例联合,它是一个通用元组。该类型还会使相等运算符过载,以进行类似于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

3
推荐指数
1
解决办法
337
查看次数