我最近开始学习Ruust,并观看了一段关于特征的视频,我了解到如果动态调度,特征也是有效的类型.如果变量的类型具有特征,那么它的代价是
- 必须分配堆,而不是分配堆栈
- 具有昂贵的初始化成本
struct Animal;
trait Roars {
fn roar(&self);
}
//implement trait roar
impl Roars for Animal {
fn roar(&self) {
println!("roarrrrrr")
}
}
//implement a method rawr
impl Animal {
fn rawr(&self) {
println!("rawrrrrrrrrr")
}
}
fn main() {
let lion: Box<dyn Roars> = Box::new(Animal);
let cheeta: Animal = Animal;
lion.roar();
cheeta.rawr()
}
>>>roarrrrrr
>>>rawrrrrrrrrr
我试着在谷歌上到处寻找这个模式,但我什么都找不到,我只知道它是is possible,但当涉及到代码性能时,它会带来一些成本,所以我应该在什么时候使用这个模式?