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;
或类似内容。非常感谢您的回答!这正是我想知道的:)