Rust 如何在trait中使用enum并在enum中的结构上实现trait?生锈

Rust 如何在trait中使用enum并在enum中的结构上实现trait?生锈,rust,enums,Rust,Enums,我正在学习Rust,所以这可能是一个副本,因为我仍然不知道如何搜索它。我试图创建一个包含不同结构的枚举,因为这些结构有相同的方法,但实现不同,所以我不知道如何正确地为trait和实现编写类型。这就是我到目前为止所做的: struct Vector2 { x: f32, y: f32, } struct Vector3 { x: f32, y: f32, z: f32, } enum Vector { Vector2(Vector2),

我正在学习Rust,所以这可能是一个副本,因为我仍然不知道如何搜索它。我试图创建一个包含不同结构的枚举,因为这些结构有相同的方法,但实现不同,所以我不知道如何正确地为trait和实现编写类型。这就是我到目前为止所做的:

struct Vector2 {
    x: f32,
    y: f32,
}

struct Vector3 {
    x: f32,
    y: f32,
    z: f32,
}

enum Vector {
    Vector2(Vector2),
    Vector3(Vector3),
}

trait VectorAdd {
    fn add(&self, other: &Vector) -> Vector;
}

impl VectorAdd for Vector2 {
    fn add(&self, other: &Vector2) -> Vector2 {
        Vector2 {
            x: self.x + other.x,
            y: self.y + other.y
        }
    }
}

这段代码没有编译,错误消息也没有让我更清楚。有人能指导我如何正确地写这篇文章吗?或者如果可能的话?

因为您在这里使用泛型,所以不需要枚举来编写特征:

结构向量2{ x:f32, y:f32, } 结构向量3{ x:f32, y:f32, z:f32, } 性状向量加法{ fn添加(&self,其他:&self)->self; } 矢量2的impl VectorAdd{ fn添加(&self,其他:&Vector2)->Vector2{ 矢量2{ x:self.x+other.x, y:self.y+other.y, } } } impl Vector3的矢量添加{ fn添加(&self,其他:&Vector3)->Vector3{ 矢量3{ x:self.x+other.x, y:self.y+other.y, z:self.z+other.z, } } } ()

您可以基于此定义实现
enum

enum向量{
矢量2(矢量2),
矢量3(矢量3),
}
impl VectorAdd for Vector{
fn添加(&self,其他:&Vector)->Vector{
匹配(自身、其他){
(Self::Vector2(a),Self::Vector2(b))=>Self::Vector2(a.add(b)),
(Self::Vector3(a),Self::Vector3(b))=>Self::Vector3(a.add(b)),
_=>死机!(“矢量的操作数无效::添加”),
}
}
}

如果变量的数量变大,宏可能会对您有所帮助。

谢谢,这回答了问题,但我仍然想知道是否可以使用Enum来实现这一点?因为现在VectorAdd可以在任何结构上实现。我能让它只在特定的结构上实现吗?@snakescantwarboots根据你所说的,你可能要寻找的是被称为@snakescantwarboots的东西。我已经用枚举的信息更新了答案。有关个人隐私,请参见vallentin的评论。