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

Чтобы сделать вышеуказанную проверку, просканирует ли Scala по обоим спискам и уравнивает вызов по каждой паре элементов?Как работает метод равных значений Scala в случае списка?

(я уверен, что этот вопрос был задан раньше, но я не мог найти хороший ответ с Google & Co)

+0

Вы просматривали код? Scala - с открытым исходным кодом. –

+0

вы попробовали запустить его? –

+2

@Tyler: Да, но я не смог найти правильный код кода, так как List расширяет множество других классов. –

ответ

24

Вы можете найти это самостоятельно для любого метода, глядя на Scaladoc и выяснить, где он определен, а затем смотрит на источник. Если вы начинаете с online docs, вы можете сделать это все, просто щелкнув: перейдите к методу, откройте его, нажав на стрелку слева, и вы увидите список переопределяющих классов. Перейдите к первому и посмотрите на источник.

Во всяком случае, в этом случае, GenSeqLike, supertrait из List и многие другие коллекции, определяет equals как canEqual проверки с последующим sameElements. В свою очередь, sameElements проверяет, являются ли оба аргумента LinearSeq s, и если это так, вызовы равны по каждой паре элементов, разбивая голову и конец отдельно друг на друга. В противном случае он по умолчанию использует итераторы, вызывая hasNext на каждом, а затем сравнивая элементы с equals.

Итак, длинный рассказ: да, он называет равным по каждой паре элементов (останавливается, как только находит несоответствие).

+3

Отлично, спасибо. Это очень помогло (также для будущих исследований). –

Смежные вопросы