Frage

Die Signatur von reduceLeft auf manchen Seq[A] ist

def reduceLeft [B >: A] (f: (B, A) => B): B 

Die Art von A ist bekannt, aber die untere Grenze >: sagt uns das B Kann jeder Supertyp von sein A.

Warum ist es so? Warum nicht

def reduceLeft (f: (A, A) => A): A

Wir wissen bereits, dass der Kopf der Sequenz Typ ist A Und so kann ich mir nicht vorstellen, wie B könnte etwas anderes sein als gleich zu A. Können Sie ein Beispiel geben, wo B Ist ein Super-Typ?

War es hilfreich?

Lösung

Nehmen wir an, Ihre Klasse B hat eine Methode combine(other:B): B. Jetzt rufst du an reduceLeft((b,a) => b.combine(a)) auf einer Liste von As. Seit der Rückkehrtyp combine ist B der Typparameter zu reduceLeft muss sein B.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top