【Rust】特質-trait
阿新 • • 發佈:2021-12-23
環境
- Rust 1.56.1
- VSCode 1.61.2
概念
參考:https://doc.rust-lang.org/rust-by-example/trait.html
示例
trait 一般翻譯成特質,之後的內容不翻譯,類似其它語言中的介面。
main.rs
struct Sheep { naked: bool, name: &'static str, } trait Animal { // Self 表示實現的型別,注意關聯函式和方法的區別 fn new(name: &'static str) -> Self; fn name(&self) -> &str; fn noise(&self) -> &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) -> &str { self.name } fn noise(&self) -> &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(); }
總結
瞭解了 Rust 中 trait 的定義方式和實現方式。