在List的情况下,Scala的equals方法如何工作?

Joh*_*ood 19 scala list equals

list1 == list2
Run Code Online (Sandbox Code Playgroud)

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

(我相信,之前已经问过这个问题,但我找不到Google&Co的好答案)

Rex*_*err 33

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

无论如何,在这种情况下,GenSeqLike一个supertrait List和许多其他集合,定义equals为一个canEqual检查后跟sameElements.反过来,sameElements检查两个参数是否为LinearSeqs,如果是,则通过逐个分开头部和尾部来对每对元素进行调用等于.否则它默认使用迭代器,调用hasNext每个迭代器,然后比较元素equals.

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

  • 非常好,非常感谢你.这有很大帮助(也适用于未来的研究). (3认同)