【发布时间】:2021-06-23 15:08:17
【问题描述】:
当我们想将多个类型一起存储在一个集合中时,可以使用特征对象。
但是当 trait 具有关联类型时,我不知道该怎么做。
trait Error {}
trait Trait {
type Error: Error;
fn set(&mut self, key: String, value: String) -> Result<(), Self::Error>;
}
struct StructA;
impl Trait for StructA {
type Error = ErrorA;
}
enum ErrorA {}
impl Error for ErrorA {}
struct StructB;
impl Trait for StructB {
type Error = ErrorB;
}
enum ErrorB {}
impl Error for ErrorB {}
fn main() -> Result<(), Box<dyn Error>> {
let value: Box<dyn Trait<Error = dyn Error>> = match 0 {
0 => Box::new(StructA),
_ => Box::new(StructB),
};
value.set(String::from("key"), String::from("value"))?;
Ok(())
}
我必须在这里指定关联类型Box<dyn Trait<Error = _>>,但我不知道哪种类型适合。我试过dyn Error,但它不起作用。
【问题讨论】:
-
@user4815162342 我刚刚为 Trait 添加了一个方法
标签: generics types rust traits associated-types