1
下面的代碼定義了一個列表類型和兩個實施案例類一個代表空列表和缺點,以創建實際列表Scala:伴侶中的「應用」方法需要創建案例類實例嗎?
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]
,如何斯卡拉實際上推斷val example
是List(1, 2, 3, Nil)
'val example2 = List(1,2,3)',實際上我想了解Cons實例是如何創建的,因爲沒有構造函數,我說把頭部和尾部放在一起來創建Cons [Int],scala如何實現這一點。 – 2014-09-28 15:09:22
我不確定我是否理解這個問題。 'Const'是一個case類,因此它有一個構造函數,帶有'A'和'List [A]'。你明確地在'apply'方法的else分支中調用它。 – 2014-09-28 15:17:52
如果你可以原諒我的新手,我會盡力解釋。正如你所提到的,由於Cons沒有正文,它有一個空構造函數。應用調用Cons以遞歸方式創建它的實例。但是apply和Cons構造函數的參數是不同的。 – 2014-09-28 15:23:50