¿Cómo pasar una función como parámetro en Rust?
¡Hola a todos! Acabo de empezar a aprender Rust y tengo un problema que parece simple, pero no encuentro la solución correcta. Quiero escribir una función que tome otra función como argumento para hacer el código más flexible.
Esto es lo que intento hacer:
```rust
fn apply_twice(f: ???, x: i32) -> i32 {
f(f(x))
}
fn add_one(x: i32) -> i32 {
x + 1
}
fn main() {
let result = apply_twice(add_one, 5);
println!("{}", result); // Espero 7
}
```
No entiendo qué tipo debo especificar para el parámetro `f`. Probé `fn(i32) -> i32`, pero el compilador se queja. También escuché sobre closures y los traits `Fn`, `FnMut`, `FnOnce` — pero ¿cuál es la diferencia? ¿Cuándo usar cada uno? ¿Cómo pasar un closure que capture variables del ámbito externo?
Expliquen, por favor, cómo pasar correctamente funciones y closures en Rust. Preferiblemente con ejemplos de código. ¡Gracias de antemano!
<<>>