代码之家  ›  专栏  ›  技术社区  ›  John Clements

F#中的快捷等式检查?

  •  5
  • John Clements  · 技术社区  · 16 年前

    在F#中,相等运算符(=)通常是外延的,而不是内涵的。太好了!不幸的是,在我看来,F#并没有使用指针相等来简化这些扩展比较。

    例如,此代码:

    type Z = MT | NMT of Z ref
    
    // create a Z:
    let a = ref MT
    // make it point to itself:
    a := NMT a
    
    // check to see whether it's equal to itself:
    printf "a = a: %A\n" (a = a)
    

    所以:我接受这样一个事实,即F#的等式运算符不使用快捷方式;有什么方法可以执行内涵(基于指针的)相等性检查吗?在我的类型中没有定义(=)运算符,如果有人能告诉我它是可用的,我会很高兴的。

    或者告诉我我对形势的分析是错的:我也很乐意。。。

    1 回复  |  直到 16 年前
        1
  •  7
  •   kvb    16 年前

    System.Object.ReferenceEquals . 在F#中更好的方法可能是使用 LanguagePrimitives.PhysicalEquality 它基本上是相同的,但只适用于引用类型(这对于您的目的可能是正确的),并且要求两个参数具有相同的静态类型。如果您想要更好的语法,还可以根据这些函数中的任何一个来定义您选择的自定义运算符。