Zgodnie ze specyfikacją języka Scala :
... wnioskowanie o typie lokalnym jest dozwolone w celu ograniczenia złożoności wywnioskowanych granic [parametrów typu]. Minimalność i maksymalność typów należy rozumieć w odniesieniu do zbioru typów o dopuszczalnej złożoności.
W praktyce jakie są ograniczenia?
Ponadto, czy istnieją inne ograniczenia, które mają zastosowanie do wywnioskowanych typów wyrażeń niż do granic typów parametrów i jakie są te ograniczenia?
scala
type-inference
piekarnik
źródło
źródło
Odpowiedzi:
Podczas wnioskowania o typach kompilator często musi obliczyć najmniejszą górną granicę (LUB) listy typów. Na przykład typ
if (cond) e1 else e1
to LUB dla typówe1
ie1
.Te typy mogą być dość duże, na przykład spróbuj tego w REPL:
To zatwierdzenie wprowadziło pewne kontrole poczytalności, aby ograniczyć głębokość takich wywnioskowanych typów.
Ostatnio wykonano pewne prace nad włączeniem wtyczki do procesu kompilacji w celu wykrycia wywnioskowanych typów, których obliczenie zajmuje dużo czasu, i zasugerowania miejsc, w których jawna adnotacja typu może być rozsądna.
źródło