首页 > 解决方案 > 如何在可变引用中获取、转换和替换向量?

问题描述

我有一个struct Database { events: Vec<Event> }. 我想将一些地图和过滤器应用于events. 有什么好方法可以做到这一点?

这是我尝试过的:

fn update(db: &mut Database) {
    db.events = db.events.into_iter().filter(|e| !e.cancelled).collect();
}

这不起作用:

cannot move out of `db.events` which is behind a mutable reference
...
move occurs because `db.events` has type `Vec<Event>`, which does not implement the `Copy` trait

有什么方法可以说服 Rust 编译器我只是暂时地获取字段值?

标签: rust

解决方案


在您暴露的情况下,更安全的方法是使用Vec.retain

fn update(db: &mut Database) {
    db.events.retain(|e| !e.cancelled);
}

推荐阅读