Dlaczego można wywnioskować typy argumentów i typ zwrotu dla wyrażenia zamknięcia, a nie dla funkcji w rdzeniu?Różnice w wnioskowaniu typu dla zamknięć i funkcji w rdzeniu
5
A
Odpowiedz
9
Jest to po prostu decyzja projektowa: Rust stosuje metodę lokalnego wnioskowania, ale nie wnioskowania globalnego. Teoretycznie możliwe jest globalne wnioskowanie typu, ale dla ułatwienia debugowania Rust świadomie je unika, ponieważ może to prowadzić do niezwykle trudnych do debugowania problemów kompilacji (np. Niewielka zmiana w tej części powoduje błąd kompilacji w głębi wewnętrznych).
Funkcje są globalne - ich podpisy typu muszą być zatem wyraźne.
Zamknięcia, będąc wewnątrz funkcji, są lokalne - ich typy można wywnioskować. (Oczywiście, jeśli przechowujesz zamknięcie w strukturze, jego typ będzie musiał być wyraźnie określony w definicji typu struktury.)
[Podobna kwestia została zadana na reddit] (http: //www.reddit. com/r/rust/comments/2bcof3/rust_type_inference_question_functions_vs_closures /) jakiś czas temu. – huon
@dbaupp To wspaniale coinceidence: D –