Rust 有没有一种方法可以使一个特征本身包含一个载体?
我对锈病是个新手,我有以下问题:我想拥有我称之为Rust 有没有一种方法可以使一个特征本身包含一个载体?,rust,Rust,我对锈病是个新手,我有以下问题:我想拥有我称之为工件的特性,工件的定义是它可以包含多个工件 我的第一个想法是制作一个工件特征,它包含一个工件特征的向量: trait伪影 { 类型工件=Vec; } 我得到了以下错误: error[E0191]:必须指定关联类型“Artifact”(来自trait“Artifact::Artifact”)的值 -->src/Artifact.rs:4:30 | 4 |类型伪影=Vec; | -------------------------^^^^^^^
工件
的特性,工件
的定义是它可以包含多个工件
我的第一个想法是制作一个工件
特征,它包含一个工件
特征的向量:
trait伪影
{
类型工件=Vec;
}
我得到了以下错误:
error[E0191]:必须指定关联类型“Artifact”(来自trait“Artifact::Artifact”)的值
-->src/Artifact.rs:4:30
|
4 |类型伪影=Vec;
| -------------------------^^^^^^^^^^^^---
| | |
||必须指定关联类型'artifacts'
|此处定义了“工件”
rust中有没有办法进行这种设计?如果您将trait中的类型定义定义为
dyn trait
,那么它是一个关联的类型,您需要在该trait的实现中指定该类型
有没有一种生锈的方法可以做出这种设计
在当前稳定发布频道中,不支持默认关联类型。但是,您可以通过夜间发布频道实现所需,如下所示:
#![feature(associated_type_defaults)]
trait Artifact {
type artifacts = Vec<Box<dyn Artifact<artifacts = Self>>>;
}
trait Artifact {
fn artifact_call(&self);
}
struct Artifact1 {
inners: Vec<Box<dyn Artifact>>,
}
struct Artifact2;
struct Artifact3;
impl Artifact for Artifact1 {
fn artifact_call(&self) {
self.inners
.iter()
.for_each(|artifact| artifact.artifact_call());
}
}
impl Artifact for Artifact2 {
fn artifact_call(&self) {
println!("Artifact 2 Call");
}
}
impl Artifact for Artifact3 {
fn artifact_call(&self) {
println!("Artifact 3 Call");
}
}
fn main() {
let container_artifact = Artifact1 {
inners: vec![Box::new(Artifact2), Box::new(Artifact3)],
};
container_artifact.artifact_call();
}
#![特征(关联类型默认值)]
特征伪影{
type artifacts=vectrait类似于其他语言中的接口。它们指定了一些契约,而不是impl细节。基本上,trait不关心也不必关心如何实现它。我认为trait或struct中的类型对您帮助不大。您可能需要一个访问函数fn artifacts(&self)->Vec;
或类似内容。非常感谢您的回答!这正是我想知道的:)