【问题标题】:How does Scala's equals method work in the case of a List?Scala 的 equals 方法在 List 的情况下如何工作?
【发布时间】:2012-06-20 15:53:54
【问题描述】:
list1 == list2

要进行上述检查,Scala 会遍历两个列表并在每对元素上调用 equals 吗?

(我敢肯定,这个问题之前有人问过,但我在 Google & Co 找不到好的答案)

【问题讨论】:

  • 你看过代码了吗? Scala 是开源的。
  • @Tyler:是的,但我找不到正确的代码,因为 List 扩展了很多其他类。
  • @Denis:是的,它似乎像我说的那样有效,但我想确保我的测试是规则,而不是例外

标签: list scala equals


【解决方案1】:

您可以通过查看 Scaladoc 并找出它的定义位置,然后查看源代码,自己为任何方法找到这一点。如果您从online docs 开始,您只需单击即可完成所有操作:转到方法,单击左侧的箭头将其打开,您将看到覆盖类的列表。转到第一个,并查看源代码。

无论如何,在这种情况下,GenSeqLikeList 和许多其他集合的超特征,将equals 定义为canEqual 检查,后跟sameElements。反过来,sameElements 检查两个参数是否都是 LinearSeqs,如果是,则通过将头部和尾部一一分开来对每对元素调用 equals。否则,它默认使用迭代器,在每个迭代器上调用 hasNext,然后将元素与 equals 进行比较。

所以,长话短说:是的,它在每对元素上调用 equals(一旦发现不匹配就停止)。

【讨论】:

  • 完美,非常感谢。这对未来的研究很有帮助。
猜你喜欢
  • 2021-12-27
  • 1970-01-01
  • 1970-01-01
  • 2012-08-22
  • 2020-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-13
相关资源
最近更新 更多