Rust 中的 dyn 关键字

有时我们需要函数返回一个 trait, 但是函数返回的类型有必须指定大小,这时问题出现了,因为 trait 可以被任何其他类型实现,这些类型的大小都不一样,所以就不能直接让一个函数返回 traitrust 提供的办法就是返回 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();
}
posted @ 2023-05-05 01:29  小土坡  阅读(148)  评论(0)    收藏  举报