小编Mar*_*vel的帖子

使用闭包创建回调系统

我正在尝试制作类似"回调系统"的东西.例如,有一个窗口和几个按钮.该窗口为每个按钮设置回调.两个回调都应该改变窗口的状态.编译器不允许&self在我的闭包/回调中捕获,我不知道如何使其工作.

我应该遵循回调的常见模式吗?

这是一个简单的例子,因为所有组件具有相同的寿命.如果组件的使用寿命不同怎么办?

struct Button<'a> {
    f: Option<Box<Fn() + 'a>>,
}

impl<'a> Button<'a> {
    fn new() -> Button<'a> { Button { f: None } }
    fn set<T: Fn() + 'a>(&mut self, f: T) { self.f = Some(Box::new(f)); }
    fn unset(&mut self) { self.f = None; }
    fn call(&self) { match self.f { Some(ref f) => f(), None => () } }
}

struct Window<'a> {
    btn: Button<'a>,
    //btns: Vec<Button<'a>>,
}

impl<'a> Window<'a> {
    fn new() -> Window<'a> { …
Run Code Online (Sandbox Code Playgroud)

closures rust

7
推荐指数
1
解决办法
1479
查看次数

标签 统计

closures ×1

rust ×1