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
我正在尝试围绕 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