在struct中更改一个字段的简单方法?

时间:2016-08-15 21:54:30

标签: rust

我有以下代码:

#[derive(Clone, Copy)]
struct Point {
    x: f64,
    y: f64,
    z: f64
}

impl Point {
    fn set_z(&self, val: f64) -> Point {
        Point{x: self.x, y: self.y, z: val}
    }
}

struct Boo {
    point: Point
}

impl Boo {
    fn point(&self) -> &Point { &self.point }
    fn set_point(&mut self, val: &Point) { self.point = *val; }
}

fn main() {
    let mut boo = Boo{point:Point{x: 0., y: 0., z: 0.}};
    let new_p = boo.point().set_z(17.);
    boo.set_point(&new_p);
}

事实上,我有很多结构,例如BooPoint字段,而且我经常需要更改其中的一个字段。

所以我可以

  1. 实施数百万种方法,如:

    impl Boo {
        fn set_x(&mut self, val: f64) { self.point.x = val; }
        fn set_y(&mut self, val: f64) { self.point.y = val; }
        //...
    }
    

    哪个太无聊了,如果有两个,三个字段,如point1point2等等,我将被埋没在这些方法中。

  2. 问题顶部描述的方法看起来更好,因为每个字段只需要两个方法,但我必须分两步进行修改:获取点和设定点。

  3. 所以对我来说理想的方法看起来像这样:

    boo.set_point(boo.point().set_z(17.));
    

    但这是不可能的,因为要实现这一点,我需要以某种方式同时读取和写入引用。

    如何为模块用户简化Point的一个字段设置?

0 个答案:

没有答案