我使用的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