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

前端 未结 1 687
攒了一身酷
攒了一身酷 2020-12-10 15:01

When using HashMap\'s get method, I get an Option<&T>, I\'ve encountered it again this time with Option<&String>.

相关标签:
1条回答
  • 2020-12-10 15:11

    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:

    • How to clone last element from vector?
    • Get the last element of a vector and push it to the same vector
    0 讨论(0)
提交回复
热议问题