我可以用Rust中的类型参数来定义特性吗?

我可以用Rust中的类型参数来定义特性吗?,rust,traits,Rust,Traits,我对锈菌是个新手,在处理性状和仿制药方面遇到了困难。我首先定义了一个trait来为自己做一些工作,然后定义了一个泛型结构,将其用作类型参数。现在我意识到在最初的trait中,我实际上想要使用我定义的结构,所以我处于一种循环中。我不知道如何摆脱它,想知道我想要的东西是否可以通过泛型实现,或者我可能需要使用装箱或其他方法?下面是一个简单的例子 这就是我最初的想法: trait Worker{ fn work()->WorkResult; } 结构工作结果{ 结果:u64; } 接下来,我意识到我想

我对锈菌是个新手,在处理性状和仿制药方面遇到了困难。我首先定义了一个trait来为自己做一些工作,然后定义了一个泛型结构,将其用作类型参数。现在我意识到在最初的trait中,我实际上想要使用我定义的结构,所以我处于一种循环中。我不知道如何摆脱它,想知道我想要的东西是否可以通过泛型实现,或者我可能需要使用装箱或其他方法?下面是一个简单的例子

这就是我最初的想法:

trait Worker{
fn work()->WorkResult;
}
结构工作结果{
结果:u64;
}
接下来,我意识到我想在结果上保留一个worker,这样我就可以懒洋洋地生成值并使用各种worker实现

trait Worker{
fn work()->WorkResult;
}
结构WorkResult,其中T:Worker{
结果:u64;
工人:T;
}
这就是
Worker
特质中的东西开始变得奇怪的地方
WorkResult
现在需要一个类型参数,但它在trait中是未知的。我尝试了许多不同的方法,但无法让编译器喜欢它

尝试:

trait Worker,其中T:Worker{
fn work()->WorkResult;
}
结构WorkResult,其中T:Worker{
结果:u64;
工人:T;
}
那根本不起作用。编译器甚至无法识别参数:

error[E0107]: wrong number of type arguments: expected 1, found 0

我不能在这里插入任何混凝土类型(我认为我不应该这样做)。有什么方法可以实现我在这里想要的吗?

这里的问题是
Worker
trait即使用作绑定也需要一个类型参数,因此您需要编写
其中T:Worker

不幸的是,在trait定义的情况下,这将是递归的。例如,如果您这样做了:

trait Worker<T> 
    where T: Worker<U>,
{...}

(请注意,
struct WorkResult
只是
struct WorkResult where T:Worker
的缩写)

这里的问题是
Worker
特性即使用作绑定也需要类型参数,因此您需要编写
where T:Worker

不幸的是,在trait定义的情况下,这将是递归的。例如,如果您这样做了:

trait Worker<T> 
    where T: Worker<U>,
{...}

(请注意,
struct WorkResult
只是
struct WorkResult的简写,其中T:Worker

我很好奇您是否真的打算将
work
作为关联函数而不是方法。应该在没有
Worker
实例的情况下调用它?但是为什么在
工作结果
中需要这个实例呢?我很好奇,您是否真的打算将
工作
作为一个关联函数而不是一个方法。应该在没有
Worker
实例的情况下调用它?但是为什么您需要在
工作结果中使用这个实例呢?