展开对拥有其内容的选项的引用
如果类型 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());