Ich mag aus bestehenden Seq Sammlung eine neue benutzerdefinierte Scala Sammlung erstellen. Ich habe eine Eigenschaft namens Ref, die die Daten wie untenin Scala
trait Ref[A] {
def get: A
def getAsOption: Option[A]
def dataType: Class[A]
// other methods
}
Meine individuelle Sammlung hält Vec benannt, die eine Sequenz von Ref ist [A] (dh Vec [A] Äquivalente Seq [Ref [A]]), Der Grund, warum ich so eine benutzerdefinierte Sammlung erstellen möchte, weil ich den Typ-Parameter Ref in der Sammlung beibehalten möchte, um ihn in benutzerdefinierten Methoden zu verarbeiten. Mein Code wie unten
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]
Aber wenn ich map() Funktion
Vec(1,2,3,4).map(intToString)
Es gibt eine Seq [Zeichenfolge] nennen, das erwartete Ergebnis ist Vec [Zeichenfolge]. Ich versuchte auch, benutzerdefiniertes CanBuildFrom in Begleiter-Objekt mit SeqFactory [Seq] zu erstellen, aber es schlug fehl. :(:(
Kann jemand mir einige Ratschläge geben darüber und wie ich implementieren, dies zu erreichen?
Ich wollte den Autor des Kommentars schätzen und dann erkennen, dass es ist von @Dima erhalten. Was für ein Zufall? Oh, das ist die beste Antwort für diese Frage. –