I often push an element to a Vec
and then call last().unwrap()
to get a reference to it. Is there a reason why push
should not return the reference to the pushed element?
This seems like something you could use a trait to solve. Besides, what kind of reference would push
return? &
or &mut
?
As push
needs a &mut self
anyway, it should return &mut
.
We can't change the type of such a commonly used pre-existing method for compatibility reasons. There should definitely be a new method for this though.
This feels a bit odd. Since you are pushing an item to the vec, you already have the item with you. So having push
return a item feels redundant
The item will often be owned by the container you’re pushing into, so now you no longer have it. I, too, have definitely encountered the case where I wanted to push something into a container and get back a reference.
Maybe we need something akin to HashMap::entry()
for Vec
?
Ah true. Yeah the entry API would make sense and keep things consistent with other collections.
I’ve definitely wanted this for HashMaps – at least with Vec it’s cheap to get a reference to what I just inserted.
I don’t know that we need a full entry
API, since this doesn’t need to look up existing items – although that could be a thing too. Here I would suggest:
fn push_last(&mut self, value: T) -> &mut T
Maybe insert
deserves a variant too, but I don’t have a name suggestion.
I think insert
is the corresponded entry
.
One advantage of a full entry
API would be, that you could also return the index of the last element, no need to another call to len
.
Not for the key, though, which is also moved.
This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.