我在 C++ 之后学习 Rust。想了解为什么我们不应该在 HashSet::insert()
函数中使用 &
吗?
我们在 HashSet::contains()
函数中使用 &
因为我们不想拥有对象
我希望 insert()
我正在阅读文档 https://doc.rust-lang.org/std/collections/struct.HashSet.html#method.insert并理解方法 pub fn insert(&mut self, value: T) -> bool
的签名
为什么我们不使用 &value
?
我的代码
use std::collections::HashSet;
fn main() {
let mut hset = HashSet::new();
let num = 111;
hset.insert(num);
if hset.contains(&num) {
println!("Contains {}", num);
}
println!("{:?}", hset);
}
最佳答案
让我尝试使用一个比喻:您的 HashSet
是一个袋子,而您的 T
是您可以放入该袋子中的事物类型。您拥有该包并负责执行我的请求。
所以现在当我使用 HashSet::contains()
时,我拿着一个物体,例如一个红球,我问你:包里有类似的物体吗? 请注意,球是我的,但我让你借用它,这样你就可以用它来与包内的物体进行比较。完成后,您归还借用的对象并回答"is"或“否”。
但是当我使用HashSet::insert()
时,我给你球,然后你将同一个球插入袋子中。如果袋子里已经有类似的物体,那么你就把新球扔掉(你不希望袋子里有重复的物体!)并回答“不”。否则,您将球插入袋子并回答"is"。请注意,无论哪种情况,现在我都不再拥有球了。
因此,在 contains()
情况下,您通过 &
传递引用,因为您借用了要使用一段时间的对象。但使用 insert()
时,您可以将对象本身作为拥有的值传递,以便容器能够拥有它。
关于rust - 为什么我们不应该在 HashSet::insert 中使用 & ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76193049/