【问题标题】:How to convert Option<&T> to Option<T> in the most idiomatic way in Rust?如何在 Rust 中以最惯用的方式将 Option<&T> 转换为 Option<T>?
【发布时间】:2018-12-22 15:06:01
【问题描述】:

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

我只是想知道是否有办法为任何实用程序特征编写一个全面的实现来实现这一目标?

【问题讨论】:

  • 你也可以写map(ToOwned::to_owned)

标签: reference rust ownership


【解决方案1】:

Option 带有各种转换的实用方法,在its documentation 中列出。对于任何实现了CloneString 实现了)的TOption&lt;&amp;T&gt;::cloned 可以满足您的需求。

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

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


另见:

【讨论】:

    猜你喜欢
    • 2021-05-05
    • 2019-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 2014-03-24
    相关资源
    最近更新 更多