以下のコードは、リスト型とケース クラスの 2 つの実装を定義し、1 つは空のリストを表し、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(head, tail)の署名は、適用の署名が互換性がないvariad def apply[A](as: A*): List[A]場合、scalaが実際にどのように推測するval exampleかですList(1, 2, 3, Nil)