问题
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?
回答1:
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
.
See also:
- How to clone last element from vector?
- Get the last element of a vector and push it to the same vector
来源:https://stackoverflow.com/questions/51338579/how-to-convert-optiont-to-optiont-in-the-most-idiomatic-way-in-rust