Важной частью get
является следующее: -> Option<&T>
.
Вопреки тому, что вы, кажется, считаете, этот метод дает вам ссылку , а не фактический объект(и при этом также устанавливается неизменный заем на предмет). В результате, когда вы затем remove()
используете указанный объект (и получаете изменяемый заем над коллекцией), ссылка, очевидно, немедленно становится недействительной, и в результате вы не можете unwrap()
*.
Возможно, вы ищете take()
элемент set вместо get()
. Это вернет объект и удалит элемент из набора вместо возврата ссылки;это также означает, что вам больше не понадобится звонить на remove()
( детская площадка ):
let mut set = HashSet::<u32>::new();
set.insert(1);
let a = set.take(&1).unwrap();