如何通过特征功能发送不同的结构?

问题描述 投票:1回答:1
enum Property {
    Triangle(TriangleProperty),
    Square(SquareProperty),
}

struct Triangle {
    x: u8,
    y: Vec<u8>,
}

struct Square {
    x: u8,
    y: String,
}

struct TriangleProperty {
    a: u8,
    b: u8,
    c: u8,
}

struct SquareProperty {
    a: u8,
    b: u8,
    c: u8,
    d: u8,
}

trait Shape {
    fn do_magic(&self, p: Property) -> u64;
}

impl Shape for Triangle {
    fn do_magic(&self, p: Property) -> u64 {
        match (p) {
            Triangle(x) => { /* do something with x */ }
            _ => panic("this wont happen"),
        }
    }
}

impl Shape for Square {
    fn do_magic(&self, p: Property) -> u64 {
        match (p) {
            Square(x) => { /* do something with x */ }
            _ => panic("this wont happen"),
        }
    }
}

如您所见,我正在打电话给panic,我认为这不是解决此问题的好方法。

这仅是一个示例,但是我无法在TriangleProperty结构内包含Triangle。因为我在使用恒定不变TriangleProperty结构的函数do_magic中将Triangle用作输入。因此,我能想到的唯一选择是将其包装在enum中。但是还有什么更好的方法吗?

data-structures struct enums rust traits
1个回答
2
投票

这似乎是关联类型

© www.soinside.com 2019 - 2024. All rights reserved.