【问题标题】:What does the symbol =?= mean in Scala?符号 =?= 在 Scala 中是什么意思?
【发布时间】:2021-03-29 11:34:31
【问题描述】:

有人可以提供一些关于这个符号的含义以及它在 Scala 中如何使用的见解吗?我第一次看到这个符号是在这个关于 Scala 中的功能结构的视频中(你可以看到他在这里输入这个符号:https://youtu.be/tD_EyIKqqCk?t=3364

Google 搜索在第 4.1.3.3 节/比较运算符/第 5 点 (https://research.cs.wisc.edu/htcondor/manual/v7.8/4_1HTCondor_s_ClassAd.html#ClassAd:evaluation-meta) 中找到了此指向过时 HTCondor 手册的链接

它指出: “此外,运算符 =?= 和 =!= 的行为类似于 == 和 !=,但并不严格。从语义上讲,=?= 测试其操作数是否为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 与'' 条件不同。”

我的问题是,使用 '==' 会在显示的代码中给出相同的结果吗?

【问题讨论】:

  • 看看this。 - 长话短说;博士;不知道那个符号是什么,它可以代表任何东西,因为它不是语言的一部分,如果不提及它来自哪个库,就不可能知道它的含义。
  • 我认为是视频作者在Equals.scala文件中定义的函数。

标签: scala functional-programming comparison-operators


【解决方案1】:

您的引用来自似乎与 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
}

【讨论】:

  • 谢谢用户,你是个谜,但你的答案不是,它澄清了。
猜你喜欢
  • 1970-01-01
  • 2012-04-19
  • 2023-03-27
  • 1970-01-01
  • 2010-09-29
  • 2011-04-18
  • 2014-01-16
  • 2015-02-13
  • 1970-01-01
相关资源
最近更新 更多