Ich möchte etwas implementieren, wie:Wie wählt man den Ausgabesammeltyp in Seq.map aus?
def f(s: Seq[Int]): Vector[String] = s.map(_.toString).toVector
Aber ich würde es direkt die Ausgabe Vector erstellen möchten, ohne die map
Ausführung zuerst, so dass, was auch immer Seq, bevor es in einen Vektor zu kopieren.
Seq.map
nimmt eine implizite canBuilFrom
Parameter, die die Sammlungsausgabetyp induziert. Also habe ich versucht s.map(...)(Vector.canBuildFrom[String])
, die den Fehler verursacht:
found : scala.collection.generic.CanBuildFrom[Vector.Coll,String,scala.collection.immutable.Vector[String]]
(which expands to) scala.collection.generic.CanBuildFrom[scala.collection.immutable.Vector[_],String,scala.collection.immutable.Vector[String]]
required: scala.collection.generic.CanBuildFrom[Seq[Int],String,Vector[String]]
def f(s: Seq[Int]): Vector[String] = s.map(_.toString)(Vector.canBuildFrom[String])
Im Grunde ist es folgern, nicht korrekt die erste Art Argument der CanBuildFrom
Wie das getan werden kann?
Ich würde es bis-Abstimmung zweimal, wenn ich könnte . Es ist so einfach zu verwenden, dass ich jetzt 'collection.breakout' über den gesamten Code habe :-) –
@Juh_ Gern geschehen! Warum haben Sie dann die akzeptierte Markierung aus der Antwort entfernt? Versuchen Sie es zweimal zu verbessern? :) –
Entschuldigung. Ich habe nicht bemerkt, dass ich es entfernt habe. –