我想在一个结构上编写一个方法,该结构借用一个包装在其属性/字段之一中的Option
中的值。
这可行吗?
考虑
struct A {}
struct Obj {
a: Option<A>
}
impl Obj {
fn ref_to_a(&self) -> &A {
//&self.a.unwrap() <-- How do I implement this ?
}
}
答案 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"),
}
}
}