Rust 中的 dyn 关键字
有时我们需要函数返回一个 trait, 但是函数返回的类型有必须指定大小,这时问题出现了,因为 trait 可以被任何其他类型实现,这些类型的大小都不一样,所以就不能直接让一个函数返回 trait。rust 提供的办法就是返回 Box<dyn traitName>。
trait Animal {
fn nies(&self);
}
struct Sheep {}
struct Cow {}
impl Animal for Sheep {
fn nies(&self) {
println!("sheep...");
}
}
impl Animal for Cow {
fn nies(&self) {
println!("Cow...");
}
}
fn random_animal(random_number: f64) -> Box<dyn Animal> {
if random_number < 0.5 {
Box::new(Sheep{})
} else {
Box::new(Cow{})
}
}
fn main() {
let animal = random_animal(0.6);
animal.nies();
}

浙公网安备 33010602011771号