首页 > 解决方案 > 我可以匹配一个盒子吗之后仍然使用它吗?

问题描述

在下面的示例中,我必须匹配 a ,以便稍后Box<Event>重新创建Box

enum Event {
    Profile(String)
}

fn send(event: Box<Event>) {
    let mut events = Vec::new();
    match *event {
        Event::Profile(profile_event) => {
            events.push(Box::new(Event::Profile(profile_event)));
        },
        _ => {
            //error!("unknown event: {:?}", event);
        }
    }
}

操场

有没有办法匹配 aBox并且仍然使用它?

标签: rust

解决方案


问题不在于匹配本身,而在于您正在profile_event退出枚举变体这一事实。如果你不这样做,它编译得很好:

fn send(event: Box<Event>) {
    let mut events = Vec::new();
    match *event {
        Event::Profile(..) => {
            events.push(event)
        },
        // ...
    }
}

推荐阅读