El límite inferior parece no funcionar con la covarianza

Tomás

Dado el siguiente código:

class Animal
class Cat extends Animal
class BlackCat extends Cat
class MyOption[+A](val x: A) {
      def get(): A = x
      def getOrElse[B >: A](default: => B): B = {
        if (x != null) x else default
      }
}

object ThirdParty {
  def getAnimal : MyOption[Animal]= new MyOption[Cat](null)
}

object MyOptionRunner {
    def main(args: Array[String]) {
    val opt3: Animal = ThirdParty.getAnimal.getOrElse(new BlackCat)
    println(opt3)
    }
}

Me sorprende que val opt3: Animal = ThirdParty.getAnimal.getOrElse(new BlackCat)pueda pasar la compilación.

El tipo de ThirdParty.getAnimales Myption [Cat], entonces la llamada es equivalente a Myption[Cat].getOrElse(new BlackCat),que no se ajusta a la definición de getOrElse, A es Cat y B es BlackCat aquí, que rompe B>: A

Silvio Mayolo
val opt3: Animal = ThirdParty.getAnimal.getOrElse(new BlackCat)

Bno es BlackCat; el tipo de Bserá el tipo más específico que se ajuste a la especificación requerida. Dado que el argumento es new BlackCat, lo sabemos B >: BlackCat. Por el requisito de getOrElse, lo sabemos B >: Cat. El tipo más específico que satisfaga tanto de estos requisitos es, naturalmente, Cat.

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

El límite en pandas "reemplazar" parece no funcionar

El límite de HardwareId no parece coincidir con la limitación de documentación

fmincon con límite inferior falla, aunque la solución está en el punto inicial

Mi código no cumple con el límite de tiempo a pesar de que parece producir la salida correcta. ¿Cómo puedo reducir el tiempo que tarda mi código en funcionar?

El poder no parece funcionar con BigDecimal (Java)

El operador json no parece funcionar con variable

La respuesta http 304 combinada con el control de caché no parece funcionar con max-age

Cplex no cumple con el límite inferior en la programación cuadrática (usando la API de Python)

límite de profundidad de constexpr con clang (fconstexpr-depth no parece funcionar)

El menú desplegable ui-bootstrap parece no funcionar con la versión 0.12.0

El operador de consulta $ expr no parece funcionar con la notación de puntos de matriz

+ = no parece funcionar con recursividad

El reino no parece funcionar

El filtro de matriz con accesorios no parece funcionar correctamente

El filtro de matriz con accesorios no parece funcionar correctamente

la subconsulta no parece funcionar

¿Cuál es la diferencia entre el punto de partición y el límite inferior?

Doctrine 2: la carga ansiosa no parece funcionar con ManyToMany

¡La anulación de CSS no parece funcionar incluso con! Important

La implementación equitativa no parece funcionar con genéricos

OpenLayers5: hitTolerance no parece funcionar con la capa WMS

Agrupar con la lista - en df.groupby parece no funcionar

La función sapply no parece funcionar con df

Agrupar con la lista - en df.groupby parece no funcionar

El inicio de sesión de Yii2 con la base de datos SQLite no parece funcionar

Parece que no se pueden espaciar los elementos verticalmente con flexbox. Flex: la columna y el espacio alrededor no parecen funcionar

La interpolación de Ansible Playbook msg var parece funcionar solo con zanahoria> en el archivo yml

¿Forma pitónica de reemplazar los valores de la lista con el límite superior e inferior (sujeción, recorte, umbral)?

Consulta de SQL Server con un límite inferior para el recuento de filas

TOP Lista

CalienteEtiquetas

Archivo