¿Por qué el parámetro de tipo de reducteleft contiene un límite inferior?
-
27-10-2019 - |
Pregunta
La firma de reduceLeft
en algunos Seq[A]
es
def reduceLeft [B >: A] (f: (B, A) => B): B
El tipo de A
es conocido, pero el límite inferior >:
nos dice que B
puede ser cualquier supertipo de A
.
¿Por qué es como este? Por que no
def reduceLeft (f: (A, A) => A): A
Ya sabemos que la cabeza de la secuencia es tipo A
Y entonces no puedo pensar en cómo B
podría ser algo más que igual a A
. ¿Puede proporcionar un ejemplo donde B
¿Es un súper de tipo súper?
Solución
Digamos que su clase B tiene un método combine(other:B): B
. Ahora llamas reduceLeft((b,a) => b.combine(a))
en una lista de A
s. Desde el tipo de retorno de combine
es B
el tipo de parámetro para reduceLeft
necesita ser B
.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow