Rust `?`运算符不能应用于类型`&amp;Option< T>`

wn9m85ua  于 2023-04-30  发布在  其他
关注(0)|答案(1)|浏览(147)

我刚开始学习Rust,所以在使用?&T1 -> &Option<T2>时遇到了一些问题。
我想获取引用并返回内部引用,但进入选项。fn (&self) -> Option<RSend>但问题是:?运算符不能应用于类型&Option<RSend>
代码为:

pub struct Bot {
    pub send_rule: Option<RSend>,
}  
pub struct RSend {
    pub d_low: Actor,
    pub d_high: Actor,
}
pub enum Actor { ... }

impl Bot {
    // COMPILES
    fn get_low_dest(&self) -> Option<&Actor> {
        match &self.send_rule {
            None => None,
            Some(rule) => Some(&rule.d_low),
        }
    }
    // DOES NOT COMPILES
    fn get_high_dest(&self) -> Option<&Actor> {
        let ss: &RSend = (&self.send_rule)?;
        return Some(&ss.d_high);
//Actually I would prefer to write something like this:
//      Some(&self.send_rule?.d_high)
    }  
}

因此,函数get_low_dest可以编译,而函数get_high_dest不能编译。
那么如何使用?在另一个引用中引用呢??没有为&Option<T>实现(而解构虽然match实现)有什么根本原因吗?

7cjasjjr

7cjasjjr1#

您可以使用Option::as_ref()&Option<RSend>转换为Option<&RSend>

fn get_high_dest(&self) -> Option<&Actor> {
    let ss: &RSend = self.send_rule.as_ref()?;
    return Some(&ss.d_high);
}

相关问题