小编Chr*_*rce的帖子

如何查找或插入 Vec

我正在尝试编写一个函数,该函数查找返回对 Vec 中现有元素的可变引用,或者如果它不存在则将其插入并返回对新元素的可变引用。

我已经尝试过几次,但借用检查员并不相信。我已将尝试编写的代码简化为下面的示例,该示例给出了相同的错误。

fn mut_find_or_insert<T: PartialEq>(vec: &mut Vec<T>, val: T) -> &mut T {
    if let Some(u) = vec.iter_mut().find(|u| **u == val) {
        u
    } else {
        vec.push(val);
        vec.last_mut().unwrap()
    }
}
Run Code Online (Sandbox Code Playgroud)

游乐场链接:https://play.rust-lang.org/?version= stable&mode=debug&edition=2018&gist=cb12c38bcf3682b15a247d14aab48b6b

Rust 给出了以下编译器错误(通过游乐场链接的完整消息):

error[E0499]: cannot borrow `*vec` as mutable more than once at a time
Run Code Online (Sandbox Code Playgroud)

这似乎应该可以在 Rust 中实现,但是我不清楚如何重新实现它以避免借用检查器错误。

rust borrow-checker

6
推荐指数
1
解决办法
6910
查看次数

标签 统计

borrow-checker ×1

rust ×1