gpt4 book ai didi

rust - 为什么我们不应该在 HashSet::insert 中使用 & ?

转载 作者:行者123 更新时间:2023-12-03 07:55:21 32 4
gpt4 key购买 nike

我在 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/

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