You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Inserting on a HashMap on a key that is already contained overwrites the value that was at that location.
If the return value of insert (Option<T>; what was previously there) is not used, that value is lost.
While it is practically impossible to warn for all cases where this might occur, a few might be caught.
I suggest checking for an insert (or get_mut().unwrap()) followed by another insert which throws away the return value, while there weren't any reads on the HashMap in between.
Advantage
Catch the loss of a value due to overwriting it
Also useful for Hashmaps that map to complex types that may be mutated in-place
Drawbacks
In some situations overwriting the old value is exactly the plan and this warn might have false positives in these kinds of situations.
This also opens the discussion whether HashMap::insert's result should be must use, where the ease of use stands against potential errors like the loss of data as explained above.
Example
letmut test = HashMap::new();
test.insert(5,vec![1,2,3]);// Or get_mut if the values is already contained: test.get_mut(5).unwrap().push(4)
test.insert(5,vec![]);// Return value not used
The text was updated successfully, but these errors were encountered:
What it does
Inserting on a HashMap on a key that is already contained overwrites the value that was at that location.
If the return value of insert (
Option<T>
; what was previously there) is not used, that value is lost.While it is practically impossible to warn for all cases where this might occur, a few might be caught.
I suggest checking for an
insert
(orget_mut().unwrap()
) followed by anotherinsert
which throws away the return value, while there weren't any reads on the HashMap in between.Advantage
Drawbacks
In some situations overwriting the old value is exactly the plan and this warn might have false positives in these kinds of situations.
This also opens the discussion whether
HashMap::insert
's result should bemust use
, where the ease of use stands against potential errors like the loss of data as explained above.Example
The text was updated successfully, but these errors were encountered: