Rust 如何在trait中使用enum并在enum中的结构上实现trait?生锈
我正在学习Rust,所以这可能是一个副本,因为我仍然不知道如何搜索它。我试图创建一个包含不同结构的枚举,因为这些结构有相同的方法,但实现不同,所以我不知道如何正确地为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),
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的评论。