De acuerdo con las especificaciones del lenguaje Scala :
... se permite la inferencia de tipo local para limitar la complejidad de los límites inferidos [de los parámetros de tipo]. La minimidad y la maximidad de los tipos deben entenderse en relación con el conjunto de tipos de complejidad aceptable.
En la práctica, ¿cuáles son los límites?
Además, ¿hay límites diferentes que se aplican a los tipos de expresión inferidos que a los límites de tipo de parámetro, y cuáles son esos límites?
scala
type-inference
Owen
fuente
fuente
Respuestas:
Al inferir tipos, el compilador a menudo necesita calcular el Límite Superior Mínimo (LUB) de una lista de tipos. Por ejemplo, el tipo de
if (cond) e1 else e1
es el LUB de los tipos dee1
ye1
.Estos tipos pueden ser bastante grandes, por ejemplo, intente esto en un REPL:
Este compromiso introdujo algunas comprobaciones de cordura para limitar la profundidad de tales tipos inferidos.
Ha habido un trabajo reciente para completar el proceso de compilación para detectar tipos inferidos que tardan mucho en calcularse, y sugerir lugares donde una anotación explícita de tipo podría ser prudente.
fuente