Приведенный ниже код определяет тип List и две реализации классов case, один из которых представляет пустой список, а Cons для создания фактического списка.
sealed trait List[+A]
case object Nil extends List[Nothing]
case class Cons[+A](head: A, tail: List[A]) extends List[A]
object List {
...
def apply[A](as: A*): List[A] = {
if (as.isEmpty) Nil
else Cons(as.head, apply(as.tail: _*))
}
val example = Cons(1, Cons(2, Cons(3, Nil)))
}
верно ли мое предположение, что список создается рекурсивным методом применения, описанным выше, когда выполняется val example = ...
.
если это так. подпись для создания Cons - Cons(head, tail)
, где, поскольку подпись приложения несовместима variad
def apply[A](as: A*): List[A]
, как scala на самом деле делает вывод, что val example
будет List(1, 2, 3, Nil)