如何避免 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 {}
我有以下实现,但我不想重复自己。如何在不重复的情况下使用在不同结构上具有相同主体的实现?
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 {}