有没有办法匹配Rust中引用后面的选项?

wwwo4jvm  于 2023-02-16  发布在  其他
关注(0)|答案(1)|浏览(121)

如果我有一个结构体,它是这样的:

struct Thing {
    opt: Option<Box<u32>>
}
fn main() {
    let thing = Thing{opt:Some(Box::new(5))};
    let pointer = &thing;
    match pointer.opt {
        None => println!("There is nothing"),
        Some(thing) => println!("There is a thing {}", thing)
    }
}

我得到了一个错误,沿着如下:“无法将”pointer.opt“作为共享引用后面的枚举变量”Some”移出“能否有人解释一下为什么会发生此错误以及可能的解决方法?
我正在处理的事情需要处理对结构体的引用,该结构体中包含类似的选项。

0ve6wy6x

0ve6wy6x1#

std::option::Option::as_ref()正好适用于这种情况:

match pointer.opt.as_ref() {
    None => println!("There is nothing"),
    Some(thing) => println!("There is a thing {}", thing)
}

相关问题