符号 =?= 在 Scala 中是什么意思?

What does the symbol =?= mean in Scala?

有人可以深入了解这个符号的含义以及它在 Scala 中的使用方式吗?我第一次看到这个符号是在这个关于 Scala 函数结构的视频中(你可以看到他在这里输入符号:https://youtu.be/tD_EyIKqqCk?t=3364

A google 搜索 link 找到了过时的 HTCondor 手册第 4.1.3.3 节/比较运算符/第 5 点(https://research.cs.wisc.edu/htcondor/manual/v7.8/4_1HTCondor_s_ClassAd.html#ClassAd:evaluation-meta

它指出: “此外,运算符 =?= 和 =!= 的行为与 == 和 != 类似,但并不严格。从语义上讲,=?= 测试其操作数是否 identical,'' i.e., have the same type and the same value. For example, 10 == UNDEFINED and UNDEFINED == UNDEFINED both evaluate to UNDEFINED, but 10 =?= UNDEFINED and UNDEFINED =?= UNDEFINED evaluate to FALSE and TRUE respectively. The =!= operator test for the 与条件不相同."

我的问题是,在显示的代码中使用“==”会产生相同的结果吗?

您的引用来自某种似乎与 Scala 无关的语言 ClassAd。我以前从未见过这种方法 =?=

但是,我在 Michael Pilquist 拥有的存储库中找到了它的定义 here,他还制作了视频:

object IsEq {
  implicit class Syntax[A](lhs: A) {
    def =?=(rhs: A): IsEq[A] = IsEq(lhs, rhs)
  }
}

IsEq 定义如下:

case class IsEq[A](lhs: A, rhs: A) {
  def isEqual(implicit eq: Equal[A]): Boolean = eq.isEqual(lhs, rhs)
}

并且 Equal 似乎是一个类型类,用于将相等性限制为相同类型的对象并使用自定义行为进行比较(例如,List 有一个 Equal 实例用于检查所有元素都相等)。

trait Equal[A] {
  def isEqual(lhs: A, rhs: A): Boolean
}