如何避免 Rust 中的 impl 重复?

How to avoid impl repetition in Rust?

我有以下实现,但我不想重复自己。如何在不重复的情况下使用在不同结构上具有相同主体的实现?

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>;
}

如何在 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 {}