Gemäß der Scala-Sprachspezifikation :
... lokale Typinferenz ist zulässig, um die Komplexität der abgeleiteten Grenzen [der Typparameter] zu begrenzen. Minimalität und Maximalität von Typen müssen relativ zu der Menge von Typen mit akzeptabler Komplexität verstanden werden.
Was sind in der Praxis die Grenzen?
Gibt es auch andere Grenzwerte für abgeleitete Ausdruckstypen als für Parametertypgrenzen, und welche Grenzwerte gelten für diese?
scala
type-inference
Owen
quelle
quelle
Antworten:
Beim Ableiten von Typen muss der Compiler häufig die kleinste obere Grenze (Least Upper Bound, LUB) einer Liste von Typen berechnen. Beispielsweise ist der Typ von
if (cond) e1 else e1
der LUB der Typen vone1
unde1
.Diese Typen können sehr groß werden. Versuchen Sie dies beispielsweise in einer REPL:
Dieses Commit führte einige Sanity Checks ein, um die Tiefe solcher abgeleiteten Typen zu begrenzen.
In jüngster Zeit wurden einige Arbeiten zum Einfügen in den Kompilierungsprozess durchgeführt, um abgeleitete Typen zu ermitteln, deren Berechnung lange dauert, und Orte vorzuschlagen, an denen eine explizite Typanmerkung möglicherweise umsichtig ist.
quelle