2012-06-20 19 views
13
list1 == list2 

要做上述檢查,Scala是否會遍歷這兩個列表並在每對元素上調用equals?Scala的equals方法在List中如何工作?

(我相信,這個問題已經被問過,但我無法找到與谷歌&合作一個很好的答案)

+0

你看過代碼嗎? Scala是開源的。 –

+0

你有沒有試過運行它? –

+2

@Tyler:是的,但我無法找到正確的代碼片段,因爲List擴展了很多其他類。 –

回答

24

您可以通過查看Scaladoc,找出找到這個自己的任何方法在哪裏定義,然後查看源代碼。如果從online docs開始,只需單擊即可完成此操作:轉到該方法,通過單擊左側的箭頭將其打開,您將看到一個覆蓋類的列表。去第一個,看看源頭。

無論如何,在這種情況下,GenSeqLike,的List一個supertrait和許多其它集合,equals定義爲canEqual支票隨後sameElements。接下來,sameElements檢查兩個參數是否爲LinearSeq s,如果是,則通過將頭部和尾部逐個分開,調用在每對元素上相等。否則,它默認使用迭代器,每個調用hasNext,然後將這些元素與equals進行比較。因此,長話短說:是的,它調用每對元素上的等於(一旦發現不匹配就停下來)。

+3

完美,非常感謝。這有很大的幫助(也爲未來的研究)。 –