struct、trait、impl的理解
根据例子学rust里面 trait那一节里面有struct、trait、impl的写法,是不是可以近似理解为:
- trait 是
interface
,规定了实现它的对象(?)需要实现哪些接口 - struct 是类
class
(对象?),用来描述它有什么属性值 - 单纯的
impl xxStruct {}
是给这个类添加它本身的方法 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();
}
推荐文章: