トレイトは実装を抽象化したもの
trait トレイト {
fn 関数(引数);
fn 関数(引数);
}
trait Print { fn print(&self); } struct Person { name:String, mail:String, age:i32 } impl Print for Person { fn print(&self) { println!("{}<{}>({}).", self.name, self.mail, self.age); } } fn person(name:String, mail:String, age:i32)-> Person { Person {name, mail, age} } struct Student { name:String, mail:String, grade:i32 } impl Print for Student { fn print(&self) { println!("grade{}: {}<{}>.", self.grade, self.name, self.mail); } } fn student(name:String, mail:String, grade:i32)-> Student { Student {name, mail, grade} } fn main(){ let taro = person { String::from("Taro"), String::from("taro@yamada"), 39 }; let hanako = person { String::from("Hanako"), String::from("hanako@flower"), 28 }; taro.print(); hanako.print(); }
### 汎用トレイトとderive属性
#[derive(Debug)] struct Person { name:String, mail:String, age:i32 } #[derive(Debug)] struct Student { name:String, mail:String, grade:i32 } fn person(name:&str, mail:&str, age:i32)->Person { Person{name:String::from(name), mail:String::from(mail), age:age} } fn student(name:&str, mail:&str, grade:i32)->Student { Student{name:String::from(name), mail:String::from(mail), grade} } fn main() { let taro = person("Taro", "taro@yamada", 39); let hanako = student("Hanako", "hanako@flower", 2); println!("{:?}", taro); println!("{:?}", hanako); }
trait Print { fn print(&self) { println!("PRINT is not yet implemented..."); } } #[derive(Debug)] struct Person { name:String, mail:String, age:i32 } #[derive(Debug)] struct Student { name:String, mail:String, grade:i32 } impl Print for Person { fn print(&self) { println!("{}<{}>({}).", self.name, self.mail, self.age); } } impl Print for Student {} fn person(name:&str, mail:&str, age:i32)->Person { Person{name:String::from(name), mail:String::from(mail), age:age} } fn student(name:&str, mail:&str, grade:i32)->Student { Student{name:String::from(name), mail:String::from(mail), grade} } fn main() { let taro = person("Taro", "taro@yamada", 39); let hanako = student("Hanako", "hanako@flower", 2); taro.print(); hanako.print(); }