Ich stolperte über Predef.StringCanBuildFrom
überraschende Implementierung, die Annahmen bricht, die ich auf CanBuildFrom
in meinem Code machte. Hier ist die Umsetzung:Predef.StringCanBuildFrom Verhalten
implicit def stringCanBuildFrom: CanBuildFrom[String, Char, String] =
new CanBuildFrom[String, Char, String] {
def apply(from: String) = apply()
def apply() = mutable.StringBuilder.newBuilder
}
Es scheint völlig unnatürlich, dass apply(String)
einfach den Parameter ignoriert. Für mich sollte die korrekte Umsetzung
implicit def stringCanBuildFrom: CanBuildFrom[String, Char, String] =
new CanBuildFrom[String, Char, String] {
def apply(from: String) = apply() ++= from
def apply() = mutable.StringBuilder.newBuilder
}
sein, aber es scheint so trivial, dass ich nicht glaube, kann ich die ony eines bin haben entdeckt, dass, da die Sprache existiert. Ich war versucht, ein Problem dafür zu lösen, aber wenn ich einen guten Grund verpasse, nicht zu tun, was ich vorgeschlagen habe, bitte sag es mir!
Mmm, soll ich weitere Beispiele für Verwendungen gelesen habe. Das stimmt, sie gehen immer davon aus, dass ein Builder leer initialisiert ist, was das Duplikat "foo" in Ihrem Beispiel erklärt. Prost :) – Dici