Traits
https://doc.rust-lang.org/book/traits.html
JavaのInterface
、C++のvirtual functionに相当する機能をRust
では、Trait
( 特性、特徴)と呼ぶ。
trait HasArea { fn area(&self) -> f64; fn is_larger(&self, &Self) -> bool; } fn print_area<T: HasArea>(shape: T) { println!("This shape has an area of {}", shape.area()); } struct Circle { x: f64, y: f64, radius: f64, } impl HasArea for Circle { fn area(&self) -> f64 { std::f64::consts::PI * (self.radius * self.radius) } } struct Square { x: f64, y: f64, side: f64, } impl HasArea for Square { fn area(&self) -> f64 { self.side * self.side } } fn main() { let c = Circle { x: 0.0f64, y: 0.0f64, radius: 1.0f64, }; let s = Square { x: 0.0f64, y: 0.0f64, side: 1.0f64, }; print_area(c); print_area(s); }