When using HashMap's get
method, I get an Option<&T>
, I've encountered it again this time with Option<&String>
. I'd like to get an owned value Option<String>
. 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?
Option
comes with utility methods for various transformations, which are listed in its documentation. For any T
that implements Clone
(which String
does), Option<&T>::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<&str>
into an Option<String>
; 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:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With