Scalas List[+T]
является абстрактным классом, осуществляемый два конкретных классов:
Nil
- представляет пустой список
Cons
(::
) - Представляет собой связанный список с head
типа T
и tail
типа List[+T]
.
Образец, который вы видите здесь, в основном представляет эти две конструкции. Давайте сделаем прецедентным анализ:
case x :: Nil => List.empty
Средства «если head
не является пустым и tail
является пустым списком, вернуть List.empty
», который возвращает пустой список.
case x :: xs => if (xs.head._1.minusYears(2).isAfter(x._1) && x._2 == xs.head._2) {
List(x, xs.head)
средства «если оба head
и tail
непусты». Предикаты, следующие за совпадением, в основном рассматривают кортеж, хранящийся внутри List[(LocalDateTime, String)]
, где _1
представляет первый элемент, а _2
представляет второй элемент. Мы копать немного глубже в смысл, если условие:.
xs.head._1.minusYears(2).isAfter(x._1)
Средство «взять первый элемент из хвоста (xs
, это голова), посмотрите на первый элемент кортежа и вычитать его на 2 года Если первый элемент в x
сек кортеже (который является LocalDateTime
) после того времени.
И
x._2 == xs.head._2
средств «взгляд в головы (x
) второй элемент, который является String
и сопоставить его со следующим элементом, который является хвостом (xs
) первым элементом (xs.head
) и соответствует обеим строкам для равенства.
Наконец:
case Nil => List.empty
средства "если список пуст", возвращает пустой список.
thanx ,. Хорошее объяснение –