我使用的Scala 2.9Scala的重複參數和參數列表混亂
我有一個類:
class Queue[T] private(private val heading: List[T], private val trailing: List[T]) {
def this(a: T*) = this(a.toList, Nil)
private def mirror = {
if (heading.isEmpty) {
new Queue[T](trailing.reverse, Nil)
} else this
}
def head = {
val q = mirror
if (q.heading.isEmpty) None else new Some(q.heading.head)
}
def tail = {
val q = mirror
if (q.heading.isEmpty) q else new Queue[T](q.heading.tail, trailing)
}
def enqueue(a: T) = {
new Queue[T](heading, a::trailing)
}
}
在方法排隊,如果我寫new Queue(heading, a::trailing)
(留出類型參數[T] ),代碼將不會編譯和scalac投訴有關「模糊引用重載的定義,類Queue類(隊列類型(T *)隊列[T]和構造函數Queue類Queue類型(標題:列表[ T],尾隨:List [T])隊列[T]匹配參數類型(List [T],List [T])「)。
那麼爲什麼有必要明確指定類型參數[T]
否則Scala會將兩個單獨的列表作爲一個整體對待重複參數?我認爲這與類型推斷有關,有人可以解釋嗎?
謝謝你Heiko。顯然我沒有意識到輔助構造函數可以用於T = List [U]的2 List [U]。 – digizer0