作为一个简化的例子,假设我想设置一个专门用于使用整数的IndexedSeq,如下所示:
class IntSeq private(val ints: Seq[Int], val length: Int) extends IndexedSeq[Int]{
def apply(idx: Int): Int = {
if(idx < 0 || idx >= length) throw new IndexOutOfBoundsException
ints(idx)
}
}
object IntSeq {
def fromSeq(seq: Seq[Int]): IntSeq = new IntSeq(seq, seq.length)
def apply(ints: Int*): IntSeq = fromSeq(ints)
}
从表面上看,这段代码似乎在以下意义上起作用:
val intSeq = IntSeq(1, 2)
intSeq(1) // correctly returns the 2
但是,如果我然后尝试使用:
扩展此IntSeqintSeq + 3
我会收到以下错误:
type mismatch;
found : Int(3)
required: String
我可以看到这是因为+方法实际上来自Predef对象,这可能不是我预期的。
IntSeq缺少什么才能使用Builder功能? 我是否需要添加/定义构建器? 我该怎么做?
答案 0 :(得分:2)
这是因为一般不可变的IndexedSeq或Seq没有+
方法。它只有:+
和+:
,因为您可以追加并添加到Seq。