Je souhaite créer une nouvelle collection Scala personnalisée à partir de la collection Seq existante. J'ai un trait nommé Ref qui contient les données comme ci-dessousCréer une collection Seq personnalisée dans Scala
trait Ref[A] {
def get: A
def getAsOption: Option[A]
def dataType: Class[A]
// other methods
}
Ma collection personnalisée nommée Vec qui est une séquence de référence [A] (c.-à-Vec [A] équivalents à Seq [Ref [A]]), la raison pour laquelle je veux créer une collection personnalisée comme celle-ci parce que je veux garder le paramètre type de Ref dans la collection à traiter dans les méthodes personnalisées. Mon code comme ci-dessous
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]
Mais quand j'appelle carte fonction
Vec(1,2,3,4).map(intToString)
() Il renvoie une Seq [chaîne], le résultat attendu est Vec [chaîne]. J'ai également essayé de créer CanBuildFrom personnalisé dans l'objet compagnon avec SeqFactory [Seq] mais il a échoué. :(:(
Quelqu'un peut-il me donner quelques conseils à ce sujet et la façon dont je mets en œuvre pour y parvenir?
je vais apprécier l'auteur de ce commentaire et il est réalisé à partir @Dima. Quelle coïncidence? Oh, c'est la meilleure réponse à cette question. –