Das Merkmal TraversableLike[+A, +Repr]
ermöglicht es, eine Sammlung zu erstellen, wobei einige Funktionen eine Repr
zurückgeben, während andere weiterhin den Typ Parameter That
auf die Funktion zurückgeben. Gibt es eine Möglichkeit, eine CustomCollection[A]
zu definieren, in der Funktionen wie map
, ++
und andere standardmäßig That
als Repr
werden, wenn nicht anders gedeutet?Erstellen Sie eine benutzerdefinierte Scala-Sammlung, in der standardmäßig die benutzerdefinierte Sammlung zurückgegeben wird?
Hier ist ein Code-Snippet, dass hoffentlich, was beschreibt Ich möchte:
case class CustomCollection[A](list: List[A]) extends TraversableLike[A, CustomCollection[A]] {
protected[this] def newBuilder = new CustomCollectionBuilder[A]
def foreach[U](f: (A) => U) {list foreach f}
def seq = list
}
class CustomCollectionBuilder[A] extends mutable.Builder[A, CustomCollection[A]] {
private val list = new mutable.ListBuffer[A]()
def += (elem: A): this.type = {
list += elem
this
}
def clear() {list.clear()}
def result(): CustomCollection[A] = CustomCollection(list.result())
}
object CustomCollection extends App {
val customCollection = CustomCollection(List(1, 2, 3))
println(customCollection filter {x => x == 1}) // CustomCollection(1)
println(customCollection map {x => x + 1}) // non-empty iterator
}
ich die letzte Zeile CustomCollection(2, 3, 4)
sein möchte.
ich nur +1 für seine nur drei Minuten hinter der Post om-nom-nom angemeldet. Es scheint keine "rechtzeitige Bearbeitung" zu geben. Knopf mit einem Daumen hoch Logo. –