How to unwrap a &Result<_,_>?

2019-01-28 02:43发布

What is a good way to extract data from a &Result type?

In my specific case, I have a &Result<DirEntry, Error> type, which I can't unwrap because I don't own the object. I tried to dereference and clone it (*left_item).clone(), but that just gives me a error with the note:

the method `clone` exists but the following trait bounds were not satisfied:
`std::result::Result<std::fs::DirEntry, std::io::Error> : std::clone::Clone`

标签: rust
1条回答
做个烂人
2楼-- · 2019-01-28 03:18

You are looking for Result::as_ref:

Converts from Result<T, E> to Result<&T, &E>.

Produces a new Result, containing a reference into the original, leaving the original in place.

The following code solves your problem:

let entry: &DirEntry = result.as_ref().unwrap();

For a mutable version, Result::as_mut is provided.

查看更多
登录 后发表回答