gpt4 book ai didi

rust - 将生命传递给结构

转载 作者:行者123 更新时间:2023-12-03 11:44:47 28 4
gpt4 key购买 nike

我有这样的代码:

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的某些结构的一些实例,并返回包含这些实例的向量。这些结构具有rpn_calculator属性,该属性是对RpnCalculator的引用。 RpnCalculator.actions()应将self(创建它的RpnCalculator)放入此引用中。
现在我得到的错误是“无法推断适当的生命周期”。我在创建要添加到矢量的实例的行中收到此错误:
Box::new(AddAction { rpn_calculator: &self })
出于这个原因,我在矢量声明中有 'a,但是它仍然不起作用。

最佳答案

您可能应该使用fn actions(&'a self),因为生命周期
您在'a中使用的dyn Action + 'a与生命周期相关
RpnCalculator

关于rust - 将生命传递给结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63661776/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com