Warum enthält der Typ -Parameter von Reduceleft eine untere Grenze?
-
27-10-2019 - |
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?
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 A
s. 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