我有以下实现,但我不想重复自己。如何在不同结构上使用具有相同主体的实现,而无需重复?
impl Message for CreateHero {
type Result = Result<Hero, Error>;
}
impl Message for SearchHero {
type Result = Result<Hero, Error>;
}
impl Message for DeleteHero {
type Result = Result<Hero, Error>;
}
答案 0 :(得分:4)
Rust中如何避免重复的答案通常是宏。
您的情况实际上很简单,就像宏一样:
macro_rules! hero_message {
($name : ident) => {
impl Message for $name {
type Result = Result<Hero, Error>;
}
}
}
hero_message!{CreateHero}
hero_message!{SearchHero}
hero_message!{DeleteHero}
阅读linked duplicated question中的答案,您还可以编写一个通用特征实现,对于像您这样的简单问题,它看起来会更加惯用。看起来像这样:
trait MessageHero {}
impl<T: MessageHero> Message for T {
type Result = Result<Hero, Error>;
}
impl MessageHero for CreateHero {}
impl MessageHero for SearchHero {}
impl MessageHero for DeleteHero {}