当使用HashMap的get方法时,我得到了Option<&T>,这次我又遇到了Option<&String>.我想得到一个自有价值Option<String>.我不写map(|x| x.to_owned())行行吗?

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

推荐答案

Option提供了用于各种转换的实用方法,这些方法在its documentation中列出.对于任何实现Clone(String实现)的T来说,Option<&T>::cloned实现了您想要的功能.

CloneToOwned更具体,所以.cloned().map(|x| x.to_owned())不匹配.例如,它不会把Option<&str>变成Option<String>;为此,你必须坚持map.

由于Rust 1.35,当TCopy时,.copied().cloned()做相同的事情,但当T不是Copy时,它将无法编译.当你想明确克隆是廉价的时,你可以使用这个.


另见:

Rust相关问答推荐

在HashMap中插入Vacant条目的可变借位问题

borrow 和内部IntoIterator

如何对字符串引用的引用向量进行排序,而不是对最外层的引用进行排序?

返回的future 不是`发送`

这个规则关于或模式到底是什么意思?如果表达片段的类型与p_i|q_i...&q;不一致,就会形成

在执行其他工作的同时,从共享裁判后面的VEC中删除重复项

S,一般性状和联想型性状有什么不同?

为什么这个变量不需要是可变的?

当发送方分配给静态时,Tokio MPSC关闭通道

在Rust中克隆源自INTO_ITER()的迭代器的成本?

对于rustc编译的RISC-V32IM二进制文件,llvm objdump没有输出

是否提供Bundle 在可执行文件中的warp中的静态文件?

Rust面向对象设计模式

在 Rust 中查找向量中 dyn struct 的索引

如何将 C++ 程序链接到 Rust 程序,然后将该 Rust 程序链接回 C++ 程序? (cpp -> rust -> cpp)

使用 Rust 从 Raspberry Pi Pico 上的 SPI 读取值

如何展平以下嵌套的 if let 和 if 语句?

没有通用参数的通用返回

`if let` 只是另一种编写其他 `if` 语句的方式吗?

基于名称是否存在的条件编译