微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Rust:如何重用 getter 和 setter 的实现?

如何解决Rust:如何重用 getter 和 setter 的实现?

由于 Rust 不支持继承,我们不能重用另一个 struct 的状态。

Head First Design Patterns为例,一个抽象的Duck类有一个属性FlyBehavior,它还提供了getter和{{1} }.

setter

但是,在 Rust 中,我们无法编写用于重用的认实现。

abstract class Duck {
   private FlyBehavior flyBehavior;
   public void setFlyBehavior(FlyBehavior flyBehavior) { this.flyBehavior = flyBehavior; }
   public FlyBehavior getFlyBehavior() { return this.flyBehavior; }
}

并且任何实现 trait Duck { fn get_fly_behavior(&self) -> &dyn FlyBehavior; fn set_fly_behavior(&mut self,fly_behavior: Box<dyn FlyBehavior>); } 的结构都必须编写 same Duckgetter。那么,有没有什么惯用的方法可以在 Rust 中重用 settergetter 的实现?

解决方法

您可以通过在要为其实现特征的结构中提供字段 fly_behavior 来重用您发布的特征,如以下演示确保

trait FlyBehavior {
    fn fun(&self);
}

trait Duck {
    fn get_fly_behavior(&self) -> &dyn FlyBehavior;
    fn set_fly_behavior(&mut self,fly_behavior: Box<dyn FlyBehavior>);
}

struct Behavior1{}
struct Behavior2{}
struct DuckObject {
    fly_behavior: Box<dyn FlyBehavior>,}
impl Duck for DuckObject {
    fn get_fly_behavior(&self) -> &dyn FlyBehavior{
        &*self.fly_behavior
    }
    fn set_fly_behavior(&mut self,fly_behavior: Box<dyn FlyBehavior>){
        self.fly_behavior=fly_behavior
    }
}
impl FlyBehavior for Behavior1{
    fn fun(&self) {
        println!("Behave1")
    }
}

impl FlyBehavior for Behavior2{
    fn fun(&self) {
        println!("Behave2")
    }
}
fn main() {
    let mut duck = DuckObject{ fly_behavior: Box::new(Behavior1{}) };
    duck.get_fly_behavior().fun();
    duck.set_fly_behavior(Box::new(Behavior2{}));
    duck.get_fly_behavior().fun();
}

The result

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。