问题
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