Avatar ·

Como passar uma função como parâmetro em Rust?

Olá a todos! Comecei a estudar Rust recentemente e encontrei um problema que parece simples, mas não consigo encontrar a solução correta. Quero escrever uma função que recebe outra função como argumento para tornar o código mais flexível. Aqui está o que estou tentando fazer: ```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 } ``` Não entendo qual tipo especificar para o parâmetro `f`. Tentei `fn(i32) -> i32`, mas o compilador reclama. Também ouvi sobre closures e os traits `Fn`, `FnMut`, `FnOnce` — mas qual é a diferença? Quando usar cada um deles? Como passar uma closure que captura variáveis do escopo externo? Explique, por favor, como passar funções e closures corretamente em Rust. De preferência com exemplos de código. Desde já, obrigado! <<>>

Principais abordagens para passar funções em Rust