Avatar ·

Quando um closure implementa as traits Fn, FnMut e FnOnce em Rust?

Olá, colegas! Comecei a estudar Rust e não consigo entender os closures. Na documentação diz que cada closure implementa automaticamente uma ou mais traits: `Fn`, `FnMut` e `FnOnce`. Mas não entendo do que isso depende. Digamos que eu tenha um código simples: ```rust let mut x = 5; let add_to_x = |y| x += y; // closure que muta x let print_x = || println!("{}", x); // closure que lê x ``` Por que `add_to_x` não pode ser usado como `Fn`, mas `print_x` pode? E quando um closure se torna `FnOnce`? Tentei passar closures para funções com diferentes restrições de traits, e o compilador reclama que a trait não foi implementada. Vocês podem explicar de forma simples como o compilador Rust decide qual trait implementar para um closure? E como isso afeta o