2012-03-23 9 views
8

Estoy aprendiendo a Scala y tengo una pregunta con respecto al límite inferior.Sobre el límite inferior en Scala

tengo una clase:

class Queue[+T] { 
    def enqueue[U>:T](x : U) = new Queue[U]() 
} 

class Fruit 
class Apple extends Fruit 
class Orange extends Fruit 
class Another 

Lo que encontré es que, para una cola de cualquier tipo, por ejemplo:

val q1 = new Queue[Fruit] 

Todas las tres líneas más adelante pasarán compilar

q1.enqueue(new Apple) 
    q1.enqueue(new Orange) 
    q1.enqueue(new Another) 

Mi pregunta es: si usamos un límite inferior para definir U debe ser un tipo estupendo de T, en las líneas de arriba, Apple claramente no es tan tipo de Fruta, ¿cómo se puede pasar a la función de enqueue?

La clase "Otra" no está en la jerarquía de la fruta en absoluto, ¿cómo se puede usar en la función en cola?

Por favor, ayúdenme con esto.

Saludos Kevin

+0

Imagínese el colon '>:' 'como un igual> =' –

+0

yo también tenía la misma pregunta. las respuestas dadas a continuación aclararon mi duda. deberías aceptar una respuesta a continuación. – weima

Respuesta

12

Si se echa un vistazo de lo que regresan a sus nuevas colas:

scala> q1.enqueue(new Apple) 
res0: Queue[Fruit] = [email protected] 

scala> q1.enqueue(new Orange) 
res1: Queue[Fruit] = [email protected] 

scala> q1.enqueue(new Another) 
res2: Queue[ScalaObject] = [email protected] 

Lo que ha dicho que específicamente U debe ser un supertipo de T (o T). Esto significa que Another funciona de maravilla porque ScalaObject es el super-tipo más específico de Another y Fruit.

5

Mi pregunta es: si usamos un límite inferior para definir U debe ser un súper tipo de T, en las líneas anteriores, Apple no es claramente un súper tipo de fruta, ¿cómo se puede pasar a la función en cola? ?

Pero new Apple es una Fruit, Fruit y es un supertipo de Fruit. Por lo tanto, en su caso U es Fruit, y se devuelve Queue[Fruit]. Y new Another es una ScalaObject, que también es un supertipo de Fruit ...

+0

esta explicación resolver mi confusión – abelard2008

Cuestiones relacionadas