【发布时间】:2017-05-17 00:44:43
【问题描述】:
我想从现有的 Seq 集合创建一个新的自定义 Scala 集合。我有一个名为Ref 的特征,其中包含如下数据
trait Ref[A] {
def get: A
def getAsOption: Option[A]
def dataType: Class[A]
// other methods
}
我的自定义集合名为Vec,它是Ref[A] 的Sequence(即Vec[A] 等效于Seq[Ref[A]]),我想创建这样的自定义集合的原因是我想保留该类型集合中Ref 的参数以在自定义方法中处理。我的代码如下
trait VecLike[A, +Repr <: Seq[Ref[A]]]
extends SeqLike[Ref[A], Repr]
with TraversableLike[Ref[A], Repr] {
// custom methods
}
trait GenVec[A]
extends VecLike[A, Seq[Ref[A]]]
with Seq[Ref[A]]
with PartialFunction[Int, Ref[A]]
abstract class AbstractVec[A](vec: Ref[A]*)
extends AbstractSeq[Ref[A]]
with GenVec[A] {...}
class Vec(vec: Ref[A]*)
extends AbstractVec[A](vec:_*)
with VecLike[A, Vec[A]]
with GenericTraversableTemplate[Ref[A], Seq]
但是当我调用map()函数时
Vec(1,2,3,4).map(intToString)
它返回一个Seq[String],预期的结果是Vec[String]。我还尝试使用SeqFactory[Seq] 在伴随对象中创建自定义CanBuildFrom,但它失败了。 :( :(
谁能给我一些关于这方面的建议以及我如何实现这一目标?
【问题讨论】: