使用方法借用包装在Option中的值

时间:2019-05-10 04:57:18

标签: rust

我想在一个结构上编写一个方法,该结构借用一个包装在其属性/字段之一中的Option中的值。

这可行吗?

考虑

struct A {}

struct Obj {
    a: Option<A>
}

impl Obj {
    fn ref_to_a(&self) -> &A {
        //&self.a.unwrap() <-- How do I implement this ?
    }
}

Playground

2 个答案:

答案 0 :(得分:3)

您可以使用Option::as_ref“从Option<T>转换为Option<&T>。”

impl Obj {
    fn ref_to_a(&self) -> &A {
        self.a.as_ref().unwrap()
    }
}

当然,您不应使用unwrap,但至少应使用expect

答案 1 :(得分:1)

我不知道您为什么不自己借用Option,但是您可以通过这种方式模仿unwrap的行为:

impl Obj {
    fn ref_to_a(&self) -> &A {
        match self.a {
            Some(ref a) => return a,
            None => panic!("There is no value"),
        }
    }
}

注意: Should I avoid unwrap in production application?