У меня есть следующий код, который рекурсивно работает с каждым элементом в списке
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 не имеет ::, но имеет +:что, как я понимаю, в принципе одно и то же.Однако, если я пытаюсь сопоставить заголовок +: tail, компилятор жалуется: ошибка: не найдено: значение +: '
- Nil относится только к 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 и, следовательно, разница.