Avatar ·

Callbacks idiomáticos em Rust: como passar funções e closures corretamente

Olá, colegas! Comecei a estudar Rust depois de C++ e não consigo entender como fazer callbacks corretamente. Em C++, eu simplesmente passava std::function ou um ponteiro para função. Aqui, tudo é mais rigoroso com ownership e lifetime. Problema: quero escrever um handler de eventos simples. Tenho uma struct Button que deve chamar uma função personalizada ao ser pressionada. Em C++, eu faria assim: ```cpp struct Button { std::function onClick; void press() { if(onClick) onClick(); } }; ``` Tentando reescrever em Rust: ```rust struct Button { callback: fn(), // tentando ponteiro para função } impl Button { fn press(&self) { (self.callback)(); } } ``` Isso funciona apenas para funções comuns, mas não para closures que capturam variáveis. Se eu escrevo: ```rust let mut count = 0; let button = Button { callback: || { count += 1; } // erro! tipo não corresponde }; ``` O compilador reclama: "expected fn item, found closure". Eu li sobre Box