如何将 Builder 方法添加到 Scala 中的自定义 IndexedSeq?

How do I add Builder methods to a custom IndexedSeq in Scala?

作为一个简化的例子,假设我想设置一个 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

但是,如果我随后尝试使用以下方法扩展此 IntSeq:

intSeq + 3 

我会得到以下错误:

type mismatch;
 found   : Int(3)
 required: String

我可以看出这是因为 + 方法实际上来自 Predef 对象,这可能不是我所期望的。

IntSeq 缺少哪些允许使用 Builder 函数的内容? 我需要添加/定义一个生成器吗? 我该怎么做?

这是因为不可变的 IndexedSeq 或 Seq 通常没有 + 方法。它只有 :++:,因为您可以将其附加到 Seq.