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