У меня есть следующий код, который рекурсивно работает с каждым элементом в List
def doMatch(list: List[Int]): Unit = list match {
case last :: Nil => println("Final element.")
case head :: tail => println("Recursing..."); doMatch(tail)
}
Теперь, игнорируя, что эта функция доступна через filter() и foreach(), это работает отлично. Однако, если я попытаюсь изменить его, чтобы принять любой Seq [Int], я столкнулся с проблемами:
- Seq не имеет::, но он имеет +:, который, как я понимаю, в основном то же самое. Если я пытаюсь сопоставить на голове +: хвост, однако, компилятор жалуется на ошибку: не найден: значение +: '
- Ниль специфичен для List, и я не уверен, что заменить его. Я собираюсь попробовать Seq(), если я когда-нибудь пройду предыдущую проблему.
Вот как я думаю, код должен выглядеть, кроме того, что он не работает:
def doMatch(seq: Seq[Int]): Unit = seq match {
case last +: Seq() => println("Final element.")
case head +: tail => println("Recursing..."); doMatch(tail)
}
Изменить: так много хороших ответов! Я принимаю ответ agilesteel, поскольку он был первым, который отметил, что:: не является оператором в моем примере, но класс case и, следовательно, разница.