我刚开始学习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
实现)有什么根本原因吗?
1条答案
按热度按时间7cjasjjr1#
您可以使用
Option::as_ref()
将&Option<RSend>
转换为Option<&RSend>
: