展開對擁有其內容的選項的引用

如果型別 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());