当使用HashMap的get
方法时,我得到了Option<&T>
,这次我又遇到了Option<&String>
.我想得到一个自有价值Option<String>
.我不写map(|x| x.to_owned())
行行吗?
我只是想知道是否有一种方法可以为任何实用特性编写一个全面的实现来实现这一点?
当使用HashMap的get
方法时,我得到了Option<&T>
,这次我又遇到了Option<&String>
.我想得到一个自有价值Option<String>
.我不写map(|x| x.to_owned())
行行吗?
我只是想知道是否有一种方法可以为任何实用特性编写一个全面的实现来实现这一点?
Option
提供了用于各种转换的实用方法,这些方法在its documentation中列出.对于任何实现Clone
(String
实现)的T
来说,Option<&T>::cloned
实现了您想要的功能.
Clone
比ToOwned
更具体,所以.cloned()
与.map(|x| x.to_owned())
不匹配.例如,它不会把Option<&str>
变成Option<String>
;为此,你必须坚持map
.
由于Rust 1.35,当T
为Copy
时,.copied()
与.cloned()
做相同的事情,但当T
不是Copy
时,它将无法编译.当你想明确克隆是廉价的时,你可以使用这个.
另见: