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?

¿Fue útil?

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 As. 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
scroll top