从一般意义上来说,不是; Rust 没有私有枚举构造函数。枚举是纯粹的公共事物。
然而,结构不是这样的,因此您可以将它们组合起来以使变体纯粹是实现细节:
// This type isn’t made public anywhere, so it’s hidden.
enum ShapeInner {
// Oh, and let’s use struct variants ’cos they’re cool.
Circle {
x: i32,
y: i32,
radius: f64,
},
Rectangle {
x1: i32,
y1: i32,
x2: i32,
y2: i32,
},
}
// Struct fields are private by default, so this is hidden.
pub struct Shape(ShapeInner);
impl Shape {
pub fn new_circle(radius: f64) -> Shape {
Shape(Circle { x: 0, y: 0, radius: radius })
}
pub fn new_rectangle(width: i32, height: i32) -> Shape {
Shape(Rectangle { x1: 0, y1: 0, x2: width, y2: height })
}
// “match self.0 { Circle { .. } => …, … }”, &c.
}
不过,我建议不要将此作为一般做法。