Rust 如何避免impl在锈蚀中重复?
我有以下实现,但我不想重复我自己。如何使用在不同结构上具有相同主体的实现而不重复Rust 如何避免impl在锈蚀中重复?,rust,dry,Rust,Dry,我有以下实现,但我不想重复我自己。如何使用在不同结构上具有相同主体的实现而不重复 impl Message for CreateHero { type Result = Result<Hero, Error>; } impl Message for SearchHero { type Result = Result<Hero, Error>; } impl Message for DeleteHero { type Result = Resul
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>;
}
CreateHero的impl消息{
类型结果=结果;
}
搜索英雄的impl消息{
类型结果=结果;
}
删除英雄的impl消息{
类型结果=结果;
}
如何避免生锈中的重复,答案通常是宏
您的案例实际上非常简单,正如宏所说:
macro_rules! hero_message {
($name : ident) => {
impl Message for $name {
type Result = Result<Hero, Error>;
}
}
}
hero_message!{CreateHero}
hero_message!{SearchHero}
hero_message!{DeleteHero}
macro\u规则!英雄信息{
($name:ident)=>{
$name的impl消息{
类型结果=结果;
}
}
}
英雄信息!{CreateHero}
英雄信息!{SearchHero}
英雄信息!{DeleteHero}
阅读中的答案,您还可以编写一个通用的trait实现,对于像您这样的简单问题,它看起来更为惯用。它看起来是这样的:
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 {}
trait MessageHero{}
T的impl消息{
类型结果=结果;
}
CreateHero{}的impl MessageHero
搜索英雄{}的impl MessageHero
DeleteHero{}的impl MessageHero
什么是消息
?这是您的特征还是第三方的特征?actix中的第三方:提供了一个属性宏来精确解决这一问题。另请参见链接重复问题的示例。