Selon les spécifications du langage Scala :
... l'inférence de type local est autorisée pour limiter la complexité des limites inférées [des paramètres de type]. La minimalité et la maximalité des types doivent être comprises par rapport à l'ensemble des types de complexité acceptable.
En pratique, quelles sont les limites?
En outre, existe-t-il des limites différentes qui s'appliquent aux types d'expression déduits et aux limites de type de paramètre, et quelles sont ces limites?
scala
type-inference
Owen
la source
la source
Réponses:
Lors de la déduction de types, le compilateur a souvent besoin de calculer la limite inférieure (LUB) d'une liste de types. Par exemple, le type de
if (cond) e1 else e1
est le LUB des types dee1
ete1
.Ces types peuvent devenir assez volumineux, par exemple, essayez ceci dans un REPL:
Ce commit a introduit des vérifications de cohérence pour limiter la profondeur de ces types inférés.
Il y a eu des travaux récents pour intégrer le processus de compilation pour détecter les types inférés qui prennent beaucoup de temps à calculer, et suggérer des endroits où une annotation de type explicite pourrait être prudente.
la source