ParSeq 的包装器,拆分器受到保护

Wrapper around ParSeq, splitter is protected

我正在尝试围绕 ParSeq 制作一个包装器 class,以便扩展我自己的一些功能。这是我目前所拥有的

class MyParSeq[A](s: ParSeq[A]) extends ParSeq[A] {
  override def apply(i: Int):  A = s(i)
  override def length: Int = s.length
  override def seq: Seq[A] = s.seq
  override protected def splitter: SeqSplitter[A] = ???
}

我了解拆分器的作用,我想要与 ParSeq 相同的并行语义,唯一的问题;拆分器标记为 protected。如何在不重新定义 SeqSplitter 的情况下环绕 ParSeq?

既然SeqSplitter是受保护的,那么你真的不应该尝试重新定义它。

在 Scala 中使用其他方法扩展 classes 的更规范的方法是使用称为 扩展方法 的模式(在 Scala 中也称为 implicit classes ).

implicit class ParSeqOps[A](parSeq: ParSeq[A]) {//name of parameter doesn't matter, only type
    def second: A  = parSeq(1) //you can define multiple methods here
    def isLengthEven: Boolean = parSeq.length % 2 == 0
}

只要 implicit class ParSeqOps 在范围内,您就可以像它们一样使用您定义的所有方法是 ParSeq:

的成员
ParSeq(1,2,3,4).second // 2
ParSeq(1,2,3,4).isLengthEven //true