Avatar ·

Rust中的惯用回调:如何正确传递函数和闭包

大家好,同事们!我在C++之后开始学习Rust,但不知道如何正确地实现回调。在C++中,我只是传递std::function或函数指针。而在这里,所有权和生命周期更加严格。 问题:我想编写一个简单的事件处理器。有一个Button结构体,它应该在按下时调用用户自定义函数。在C++中,我会这样做: ```cpp struct Button { std::function onClick; void press() { if(onClick) onClick(); } }; ``` 尝试用Rust重写: ```rust struct Button { callback: fn(), // 尝试使用函数指针 } impl Button { fn press(&self) { (self.callback)(); } } ``` 这只适用于普通函数,但不适用于捕获变量的闭包。如果我写: ```rust let mut count = 0; let button = Button { callback: || { count += 1; } // 错误!类型不匹配 }; ``` 编译器报错:“expected fn item, found closure”。我读过关于Box