Rust中的trait object是什么以及如何创建?
大家好!我最近在学习Rust,正在尝试理解trait。我读过文档,但"trait object"这个概念对我来说还是很模糊。
这是我写的一个简单的trait:
```rust
trait Animal {
fn speak(&self);
}
struct Dog;
impl Animal for Dog {
fn speak(&self) {
println!("Woof!");
}
}
struct Cat;
impl Animal for Cat {
fn speak(&self) {
println!("Meow!");
}
}
```
我想创建一个向量来存储不同的动物——比如Dog和Cat。但如果我写`Vec`,编译器会报错,说Animal是一个trait而不是类型。网上建议用`Box`,但我不明白这个`dyn`是什么,为什么不用它就不行。
请用简单易懂的方式解释一下:
1. 什么是trait object?
2. 它在底层是如何工作的?
3. 为什么需要写`dyn`,它是什么意思?
4. trait object有哪些限制?
谢谢!
<<>>
什么是trait object?
Trait object(trait对象)——是一种动态分发的方式,让你可以把实现了某个trait的不同类型的值当作统一类型来使用。在你的例子中,`Box