Rust 从HashSet获取时发生不可变借用 let mut set=HashSet:::new(); 设a=set.get(&1); 设置。删除(&1); a、 展开();//无法将“set”作为可变项借用,因为它也是作为不可变项借用的
这是我的密码。我明白了错误的含义以及为什么生锈会阻止我这么做。 但是我在Rust 从HashSet获取时发生不可变借用 let mut set=HashSet:::new(); 设a=set.get(&1); 设置。删除(&1); a、 展开();//无法将“set”作为可变项借用,因为它也是作为不可变项借用的,rust,lifetime,Rust,Lifetime,这是我的密码。我明白了错误的含义以及为什么生锈会阻止我这么做。 但是我在set.rs中找不到任何类型注释来导致该错误 pub-fn-get(&self,value:&Q)->选项 其中T:借用, Q:Hash+Eq 这是set.get的声明,但我看不到任何相关内容。get的重要部分如下:->Option 与您似乎相信的相反,此方法为您提供了一个引用,而不是实际对象(这样做还建立了对项目的不可变借用)。因此,当您随后remove()所述对象(并获得对集合的可变借用)时,该引用显然立即无效,因此,
set.rs
中找不到任何类型注释来导致该错误
pub-fn-get(&self,value:&Q)->选项
其中T:借用,
Q:Hash+Eq
这是
set.get
的声明,但我看不到任何相关内容。get的重要部分如下:->Option
与您似乎相信的相反,此方法为您提供了一个引用,而不是实际对象(这样做还建立了对项目的不可变借用)。因此,当您随后remove()
所述对象(并获得对集合的可变借用)时,该引用显然立即无效,因此,您不可能unwrap()
它
您可能正在查看set元素的take()
,而不是get()
。这将返回对象并从集合中删除该项,而不是返回引用;这还意味着您将不再需要调用remove()
或():
let mut set=HashSet:::new();
套。插入(1);
设a=set.take(&1).unwrap();
错误消息告诉a
正在借用set
。但是选项
似乎并没有借用设置
本身。take
的类型签名不同之处在于&mut self
@user3584499 Rust的所有权/借用系统没有调整以识别集合中的单个元素;因此,当获取对集合成员的引用时,也间接获取对集合本身的相同类型的引用。当你思考它时,它也是相当合乎逻辑的;它允许任何需要更精细调整约束的人通过内部可变性自行实现
let mut set = HashSet::<u32>::new();
set.insert(1);
let a = set.take(&1).unwrap();