我开始着手我的第一个更雄心勃勃的 Rust 项目,并与我在用于学习的任何资源和教程中没有遇到的东西作斗争。问题的标题抓住了抽象问题,但对于示例,我将使用我正在与之抗争的具体示例。
对于我的项目,我需要与不同的第三方服务交互,因此我决定使用actix框架作为我领域中不同参与者的抽象。该框架定义了Actor
必须实现的特征:
use actix::prelude::*;
struct MyActor {
count: usize,
}
impl Actor for MyActor {
type Context = Context<Self>;
}
我有一个自己的特征,它定义了第三方集成的接口。让我们称之为Client
。我希望每个客户都表现得像个演员。
use actix::Actor;
pub trait Client: Actor {}
在其他地方,我有一个存储对系统中所有活动客户端的引用的向量。当我编译代码时,我收到以下错误:
error[E0191]: the value of the associated type `Context` (from the trait `actix::actor::Actor`) must be specified
--> transponder/src/transponder.rs:15:26
|
15 | clients: Vec<Box<Client>>
| ^^^^^^ missing associated type `Context` value
我现在花了几个小时试图解决这个问题,但都没有奏效。
- 我试图在特征中指定类型,但得到了
associated type defaults are unstable
一个错误。 - 我试图在 trait 的实现 (
impl Simulation
) 中指定类型,但得到了associated types are not allowed in inherent impls
一个错误。 - 我尝试了一些东西
impl <T: Actor> Simulation for T
(例如,如图所示),但没有任何效果。
我的假设是我缺少关于特征和类型的重要知识。如果有人能帮助我解决我的问题,并指出我丢失的拼图的方向,我将不胜感激。我觉得这里有一个关于 Rust 的重要课程,我真的很想学习。