如何将Option <&T>转换为Option <t>?

时间:2018-12-25 05:40:49

标签: rust

我不知道如何将Option <&T>转换为Option。
我使用reqwest。 这是我的代码:

let body: Option<Body> = request.body();

但是我收到mismatched type错误。
如何将Option<&Body>转换为<Option<Body>>

1 个答案:

答案 0 :(得分:2)

拥有Option<&T>时,实际上并没有 object 本身。您可能有对所述对象的引用。显然,如果没有中间的技巧,您将无法从“引用”转到“成熟的拥有的对象”。您目前只有对象的指针,而不是对象本身,因此,您唯一的办法就是找到一种方法来复制它。

如果T实现了Clone,则理论上您可以clone()将对象命名为一天-这会将您的Option<&T>变成Option<T>完整内存副本的成本。从类型签名的角度来看,这可能是一个hyper问题,而Body并没有实现这种特征。

所有其他解决方案将失败:

  • 您无法在对象上创建方法来对其进行解构并返回self,因为这会使您在&T上拥有的借用无效
  • 您只有借钱,所以无法直接从&T转到T