在Scala 2.10中,我正在尝试创建自己的SeqLike类,它不允许重复。我试图通过覆盖添加到它的方法来做到这一点,在每个方法的末尾调用distinct()
:
sealed class UniqueSeq[A] private ( private val values : Seq[A] ) extends SeqLike[A,Seq[A]] with Seq[A]// with GenericTraversableTemplate[A,UniqueSeq]
{
def apply( idx : Int ) : A = values( idx )
def iterator = values.iterator
def length = values.length
override def ++[B]( that : GenTraversableOnce[B] ) : Seq[B] =
{
val res = values ++ that
res.distinct
}
}
但是,重写的++方法无法编译。这是SeqLike文档中列出的签名,但res
的类型为Seq[Any]
,因此返回类型也是如此。
我无法看到这种方法是如何工作的,因为A
和B
完全不相关,我只能看到返回类型为Seq[Any]
- 有人可以解释一下如何正确覆盖它?