gpt4 book ai didi

rust - 从 HashSet 获取时发生不可变借用

转载 作者:行者123 更新时间:2023-11-29 08:30:49 31 4
gpt4 key购买 nike

let mut set = HashSet::<u32>::new();

let a = set.get(&1);
set.remove(&1);
a.unwrap(); // cannot borrow `set` as mutable because it is also borrowed as immutable

这是我的代码。我明白错误的含义以及为什么使用rust 会阻止我这样做。但是我在 set.rs 中找不到任何类型注释来使该错误发生。

 pub fn get<Q: ?Sized>(&self, value: &Q) -> Option<&T>
where T: Borrow<Q>,
Q: Hash + Eq

这是 set.get 的声明,但我看不到任何相关内容。

最佳答案

重要部分get是以下内容:-> Option<&T> .

与您似乎相信的相反,此方法为您提供了一个引用,而不是实际的对象(并且这样做还建立了对项目的不可变借用)。结果,当你然后 remove()说对象(并在集合中获得可变借用),引用显然立即失效,因此,你不可能 unwrap()

您可能正在寻找 take() set 元素而不是 get() .这将返回对象并从集合中删除项目,而不是返回引用;这也意味着您将不再需要调用 remove()要么 ( playground ):

let mut set = HashSet::<u32>::new();
set.insert(1);
let a = set.take(&1).unwrap();

关于rust - 从 HashSet 获取时发生不可变借用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58351150/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com