如何在 Rust 中以最惯用的方式将 Option<&T> 转换为 Option<T>?

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

在使用HashMap的get方法时,得到了一个Option<&T>,这次又遇到了Option<&String>。我想获得一个拥有的价值 Option<String>。如果我不写 map(|x| x.to_owned()) 这可能吗?

我只是想知道是否有一种方法可以为任何实用特性编写一个全面的实现来实现这一点?

Option 附带用于各种转换的实用方法,its documentation. For any T that implements Clone (which String does), Option<&T>::cloned 中列出的这些方法可以满足您的需求。

CloneToOwned 更具体,因此 .cloned() 不是 .map(|x| x.to_owned()) 精确 匹配。例如,它不会将 Option<&str> 变成 Option<String>;为此,您必须坚持 map.

从 Rust 1.35 开始,当 TCopy 时,.copied().cloned() 做同样的事情,但当 T 时会编译失败不是 Copy。当您想明确表示克隆很便宜时,您可以使用它。


另请参阅: