snippetrustMajor
How to convert Option<&T> to Option<T> in the most idiomatic way in Rust?
Viewed 0 times
idiomatichowtheconvertoptionwayrustmost
Problem
When using HashMap's
I'm just wondering if there's a way to write a blanket implementation for any of the utility traits to achieve that?
get method, I get an Option, I've encountered it again this time with Option. I'd like to get an owned value Option. Is this possible without me writing map(|x| x.to_owned())?I'm just wondering if there's a way to write a blanket implementation for any of the utility traits to achieve that?
Solution
Option comes with utility methods for various transformations, which are listed in its documentation. For any T that implements Clone (which String does), Option::cloned does what you're looking for.Clone is more specific than ToOwned, so .cloned() isn't an exact match for .map(|x| x.to_owned()). For example, it won't turn an Option into an Option; for that you will have to stick with map.Since Rust 1.35, when
T is Copy, .copied() does the same thing as .cloned(), but it will fail to compile when T is not Copy. You might use this when you want to be explicit that the clone is cheap.See also:
- How to clone last element from vector?
- Get the last element of a vector and push it to the same vector
Context
Stack Overflow Q#51338579, score: 58
Revisions (0)
No revisions yet.