How to convert Option<&T> to Option<T> in the most idiomatic way in Rust?

本小妞迷上赌 提交于 2020-01-02 02:43:05

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!