rust - 将生命周期传递给结构
问题描述
我有这样的代码:
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
.
推荐阅读
- node.js - 摩卡测试说快递结果不是 json。json validate 说是
- php - 多线程php脚本
- python - 根据用户是否喜欢帖子来更改按钮
- cognos - 简单类型内容中不能有元素子元素
- webvr - Oculus 浏览器 输入 VR 事件
- r - 如何使用 gganimate 为分组条形图设置动画?
- ios - Firebase Analytics iOS/Unity 推送通知?
- c++ - 如何使用 OTL ODBC 驱动程序将 C++ 连接到 MySQL?
- javascript - 如何将参数传递给函数并仍然访问事件以防止默认
- pdfbox - 用于检查 pdf 页面的命令行是否包含图像