将生命周期传递给结构
Passing lifetime to a struct
我有这样的代码:
pub trait Action {
fn execute(&self);
}
struct AddAction<'a> {
rpn_calculator: &'a RpnCalculator
}
struct DeductAction<'a> {
rpn_calculator: &'a RpnCalculator
}
impl Action for DeductAction<'_> {
fn execute(&self) {
// ...
}
}
impl Action for AddAction<'_> {
fn execute(&self) {
// ...
}
}
impl<'a> RpnCalculator {
fn actions(&self) -> Vec<Box<dyn Action + 'a>> {
let mut actions: Vec<Box<dyn Action + 'a>> = vec![
Box::new(AddAction { rpn_calculator: &self })
Box::new(AddAction { rpn_calculator: &self })
// ...
];
// ...
actions
}
}
我的代码的目的是 RpnCalculator.actions() 应该创建一些实现特征 Action 的结构的一些实例和 return 一个包含这些实例的向量。这些结构有一个 属性 rpn_calculator ,它是对 RpnCalculator 的引用。 RpnCalculator.actions() 应该将自己(创建它的 RpnCalculator)放入此引用中。
现在我得到的错误是“无法推断适当的生命周期”。我在创建添加到向量的实例的行中收到此错误:
Box::new(AddAction { rpn_calculator: &self })
出于这个原因,我在矢量声明中有 'a
,但它仍然不起作用。
你可能应该使用 fn actions(&'a self)
因为生命周期
'a
你在 dyn Action + 'a
中使用与生命周期有关
RpnCalculator
.
的
我有这样的代码:
pub trait Action {
fn execute(&self);
}
struct AddAction<'a> {
rpn_calculator: &'a RpnCalculator
}
struct DeductAction<'a> {
rpn_calculator: &'a RpnCalculator
}
impl Action for DeductAction<'_> {
fn execute(&self) {
// ...
}
}
impl Action for AddAction<'_> {
fn execute(&self) {
// ...
}
}
impl<'a> RpnCalculator {
fn actions(&self) -> Vec<Box<dyn Action + 'a>> {
let mut actions: Vec<Box<dyn Action + 'a>> = vec![
Box::new(AddAction { rpn_calculator: &self })
Box::new(AddAction { rpn_calculator: &self })
// ...
];
// ...
actions
}
}
我的代码的目的是 RpnCalculator.actions() 应该创建一些实现特征 Action 的结构的一些实例和 return 一个包含这些实例的向量。这些结构有一个 属性 rpn_calculator ,它是对 RpnCalculator 的引用。 RpnCalculator.actions() 应该将自己(创建它的 RpnCalculator)放入此引用中。
现在我得到的错误是“无法推断适当的生命周期”。我在创建添加到向量的实例的行中收到此错误:
Box::new(AddAction { rpn_calculator: &self })
出于这个原因,我在矢量声明中有 'a
,但它仍然不起作用。
你可能应该使用 fn actions(&'a self)
因为生命周期
'a
你在 dyn Action + 'a
中使用与生命周期有关
RpnCalculator
.