24
list1 == list2

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

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

4

1 回答 1

40

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

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

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

于 2012-06-20T16:01:42.390 回答