Avatar ·

¿Por qué existen tipos anónimos únicos en Rust y cómo trabajar con ellos?

¡Hola a todos! Empecé a estudiar Rust recientemente y tengo una falta de comprensión con el concepto de tipos anónimos. Leí que en Rust cada literal de closure tiene su propio tipo único e innombrable. Por ejemplo, este código: ```rust let add_one = |x: i32| x + 1; let double = |x: i32| x * 2; ``` Entiendo que `add_one` y `double` son closures diferentes con tipos diferentes. Pero, ¿por qué se hizo esto? En C++ u otros lenguajes puedo simplemente declarar un puntero a función o usar `std::function`. ¿Por qué Rust optó por crear tipos anónimos únicos? Me parece que esto complica la escritura de código genérico, especialmente cuando quiero pasar un closure a una función o almacenarlo en una estructura. Por ejemplo, no puedo simplemente escribir: ```rust fn apply(f: ???, x: i32) -> i32 { f(x) } ``` Tengo que usar genéricos o `Box`. ¿Es esto normal? ¿O me estoy perdiendo algo? ¿Cómo diseñar código teniendo en cuenta esta característica? Agradecería una explicación con ejemplos de por qué tal