我正在查看Rust 文档的方法语法部分,并发现了构建器模式的示例。CircleBuilder下面示例中的结构是该结构的精确副本Circle。看起来这个冗余代码违反了通常的编程规范。
我理解为什么该示例创建了一个新结构,因为创建者不想针对原始Circle结构实现构建器方法。这很好,但是有没有办法重写这个示例,以便没有冗余,但仍然保持函数中漂亮的构建器接口main()完好无损?
我尝试创建一个空结构或仅包含一个一次性元素的结构,但这不起作用。
struct Circle {
x: f64,
y: f64,
radius: f64,
}
impl Circle {
fn area(&self) -> f64 {
std::f64::consts::PI * (self.radius * self.radius)
}
}
struct CircleBuilder {
x: f64,
y: f64,
radius: f64,
}
impl CircleBuilder {
fn new() -> CircleBuilder {
CircleBuilder { x: 0.0, y: 0.0, radius: 1.0, }
}
fn x(&mut self, coordinate: f64) -> &mut CircleBuilder {
self.x = coordinate;
self …Run Code Online (Sandbox Code Playgroud)