Ошибка в том, что вы объявили метод возврата A
:
def last[A](a:List[A]) : A
^^^
и пустой список, Nil
не является A
.
(И (как примечание), как говорится в сообщении об ошибке, Nil
не принимает параметры типа.)
Лучший тип возврата для функции last
, вероятно, Option[A]
.Ваше определение метода, но с Option[A]
будет выглядеть так:
scala> def last[A](a: List[A]): Option[A] =
| a match {
| case x :: Nil => Some(x)
| case _ :: tail => last(tail)
| case Nil => None
| }
last: [A](a: List[A])Option[A]