struct、trait、impl的理解

根据例子学rust里面 trait那一节里面有struct、trait、impl的写法,是不是可以近似理解为:

  1. trait 是 interface,规定了实现它的对象(?)需要实现哪些接口
  2. struct 是类 class(对象?),用来描述它有什么属性值
  3. 单纯的 impl xxStruct {} 是给这个类添加它本身的方法
  4. impl xxTrait for xxStruct {} 是声明这个类实现了这个接口,其中接口定义的那些方法在本 class 里的实现方式是什么。
struct Sheep { naked: bool, name: &'static str }

trait Animal {
    fn new(name: &'static str) -> Self;

    fn name(&self) -> &'static str;
    fn noise(&self) -> &'static str;

    fn talk(&self) {
        println!("{} says {}", self.name(), self.noise());
    }
}

impl Sheep {
    fn is_naked(&self) -> bool {
        self.naked
    }

    fn shear(&mut self) {
        if self.is_naked() {
            println!("{} is already naked...", self.name());
        } else {
            println!("{} gets a haircut!", self.name);

            self.naked = true;
        }
    }
}

impl Animal for Sheep {
    fn new(name: &'static str) -> Sheep {
        Sheep { name: name, naked: false }
    }

    fn name(&self) -> &'static str {
        self.name
    }

    fn noise(&self) -> &'static str {
        if self.is_naked() {
            "baaaaah?"
        } else {
            "baaaaah!"
        }
    }

    fn talk(&self) {
        println!("{} pauses briefly... {}", self.name, self.noise());
    }
}

fn main() {
    let mut dolly: Sheep = Animal::new("Dolly");

    dolly.talk();
    dolly.shear();
    dolly.talk();
}
讨论数量: 2

这个其实The book里面专门花了一章[https://learnku.com/docs/rust-lang/2018/ch17-01-what-is-oo/4566] 来说面向对象和Rust的关系,Rust不是完全的面向对象语言,但是可以进行面向对象编程,也可以抽象对应的面向对象设计模式。

3年前 评论

这生命周期全用static... 够粗暴...

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!