A reference to an option &Option<T>
cannot be unwrapped if the type T
is not copyable. The solution is to change the option to &Option<&T>
using as_ref()
.
Rust forbids transferring of ownership of objects while the objects are borrowed. When the Option itself is borrowed (&Option<T>
), its contents is also — indirectly — borrowed.
#[derive(Debug)]
struct Foo;
fn main() {
let wrapped = Some(Foo);
let wrapped_ref = &wrapped;
println!("{:?}", wrapped_ref.unwrap()); // Error!
}
cannot move out of borrowed content [--explain E0507]
However, it is possible to create a reference to the contents of Option<T>
. Option's as_ref()
method returns an option for &T
, which can be unwrapped without transfer of ownership:
println!("{:?}", wrapped_ref.as_ref().unwrap());