展开对拥有其内容的选项的引用

如果类型 T 不可复制,则无法解开对 &Option<T> 选项的引用。解决方案是使用 as_ref() 将选项更改为 &Option<&T>

Rust 禁止在借用对象时转移对象的所有权。当期权本身被借用时(&Option<T>),其内容也是 - 间接借用的。

#[derive(Debug)]
struct Foo;
 
fn main() {
    let wrapped = Some(Foo);
    let wrapped_ref = &wrapped;
    
    println!("{:?}", wrapped_ref.unwrap()); // Error!
}

无法摆脱借来的内容[–explain E0507]

但是,可以创建对 Option<T> 内容的引用。Option 的 as_ref() 方法返回 &T 的一个选项,可以在不转让所有权的情况下解包:

println!("{:?}", wrapped_ref.as_ref().unwrap());