Boxでくくって、dyn
キーワードをつけるのがミソ
trait Animal { fn cry(&self); } struct Dog {} impl Animal for Dog { fn cry(&self) { println!("ワン"); } } struct Cat {} impl Animal for Cat { fn cry(&self) { println!("にゃん"); } } fn new_animal(animal: &str) -> Box<dyn Animal> { if animal == "Dog" { Box::new(Dog{}) } else { Box::new(Cat{}) } } fn main() { let animal = new_animal("Dog"); animal.cry(); }