在Scala中连接TraversableOnce对象?

J P*_*lar 3 iterator scala concatenation

我想将可遍历的一次连接到可遍历的一次而不解决任何一次.这是我提出的一个隐含的解决方案,但我不知道我是否缺少原生解决方案......

object ImplicitTraversableOnce {
  implicit def extendTraversableOnce[T](t : TraversableOnce[T]) = new TraversableOnceExtension(t)
}

class TraversableOnceExtension[T <: Any](t : TraversableOnce[T]) {

  def ++ (t2:TraversableOnce[T]):TraversableOnce[T] = new concat(t.toIterator, t2.toIterator)

  private class concat(i1:Iterator[T], i2:Iterator[T]) extends Iterator[T] {
    private var isOnSecond = false

    def hasNext:Boolean =
      if (isOnSecond) i2.hasNext
      else if (!i1.hasNext) {
        isOnSecond = true
        hasNext
      }
    else true

    def next():T = if (isOnSecond) i2.next() else i1.next()
  }
}
Run Code Online (Sandbox Code Playgroud)

Rex*_*err 6

您可以使用++加入迭代器.所以,如果你打算使用迭代器,那么

def ++(t2: TraversableOnce[T]): TraversableOnce[T] = t.toIterator ++ t2.toIterator
Run Code Online (Sandbox Code Playgroud)

之所以这样做是为了提供一个有效foreachTraversableS中的不是Iterable/ Iterator,但你需要填写所有的TraversableOnce抽象方法.