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.)
Powiązane problemy
- 1. Wielowątkowość i zamknięć w .NET
- 2. RealProxy w rdzeniu dotnet?
- 3. Zrozumienie zamknięć w Pythonie
- 4. Gniazda w rdzeniu
- 5. zrozumienia javascript globalnej przestrzeni nazw i zamknięć
- 6. Obsługa wyjątków w rdzeniu asp.net?
- 7. Włamanie właściwości w rdzeniu Asp.Net
- 8. Obsługa OData w rdzeniu ASP.net
- 9. Różnice między array_replace i array_merge w PHP
- 10. Różnice w listview.setOnItemClickListener i row.setOnClickListener
- 11. Przekazywanie i przechowywanie zamknięć/wywołania zwrotne w Swift
- 12. AOP w rdzeniu Dotnet: Dynamic Proxy z Real Proxy w rdzeniu Dotnet
- 13. Co jest takiego specjalnego w przypadku zamknięć?
- 14. Dlaczego PHP wymaga operatora użycia dla zamknięć?
- 15. Gdzie są MethodBuilder, ModuleBuilder i AssemblyBuilder w rdzeniu dotnet?
- 16. Typescript: bezpieczeństwo typu dla właściwości interfejsu w deklaracji funkcji
- 17. Powrót typu scala dla funkcji krotek
- 18. Głębokość w drzewach tabel MYSQL i tabelach zamknięć
- 19. Warunek, jeśli różnice w C# i VB
- 20. Różnice w lotności w C# i C
- 21. Jak używać znaków Fn/zamknięć w podpisach w Rust
- 22. Określanie typu funkcji w Programowaniu funkcjonalnym
- 23. Różnice między specjalizacją szablonu a przeciążaniem dla funkcji?
- 24. Jak działa zarządzanie pamięcią zamknięć w Scali?
- 25. Wygenerowane różnice IL dla VB.NET i C#
- 26. Sprawdzanie typu statycznego i dynamicznego w C++
- 27. Wywoływanie zamknięć z tablicy w Rust
- 28. Jak zdefiniować tablicę zamknięć w Swift?
- 29. DirectCast i typu C różnice z teksty stałe
- 30. VowpalWabbit: Różnice i skalowalność
[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 –