De acordo com o Scala Language Spec :
... a inferência de tipo local é permitida para limitar a complexidade de limites inferidos [dos parâmetros de tipo]. Minimalidade e maximalidade de tipos devem ser entendidas em relação ao conjunto de tipos de complexidade aceitável.
Na prática, quais são os limites?
Além disso, existem limites diferentes que se aplicam aos tipos de expressão inferidos e aos limites do tipo de parâmetro, e quais são esses limites?
scala
type-inference
Owen
fonte
fonte
Respostas:
Ao inferir tipos, o compilador geralmente precisa calcular o LUB (Least Upper Bound) de uma lista de tipos. Por exemplo, o tipo de
if (cond) e1 else e1
é o LUB dos tipos dee1
ee1
.Esses tipos podem ficar muito grandes, por exemplo, tente isso em um REPL:
Esse commit introduziu algumas verificações de sanidade para limitar a profundidade desses tipos inferidos.
Houve algum trabalho recente para conectar ao processo de compilação para detectar tipos inferidos que demoram muito para serem calculados e sugerir locais onde uma anotação explícita de tipo pode ser prudente.
fonte