Types 有没有一种方法可以在Rust中接受多个回调算术?

Types 有没有一种方法可以在Rust中接受多个回调算术?,types,rust,Types,Rust,我正在尝试为我的库实现语法sugar,以便有人可以编写.render(| image |{…})而不是.render(|(),image{…}),如果他们没有进行有趣的状态管理。我想我可以通过为所有FnMut(&State,&Image)实现一个trait,并为FnMut(&Image)提供一个单元实现来实现这一点。不幸的是,当我尝试实现这一点时,会出现“冲突实现”错误,因为没有理由不能同时实现这两个FnMut特征 我当前的尝试如下所示: trait RenderCallback{ fn渲染(&

我正在尝试为我的库实现语法sugar,以便有人可以编写
.render(| image |{…})
而不是
.render(|(),image{…})
,如果他们没有进行有趣的状态管理。我想我可以通过为所有
FnMut(&State,&Image)
实现一个trait,并为
FnMut(&Image)
提供一个单元实现来实现这一点。不幸的是,当我尝试实现这一点时,会出现“冲突实现”错误,因为没有理由不能同时实现这两个
FnMut
特征

我当前的尝试如下所示:

trait RenderCallback{
fn渲染(&mut self,state:&mut state,image:&mut image);
}
F的impl RenderCallback
哪里
F:FnMut(&mut状态,&mut映像),
{
fn渲染(&mut self,state:&mut state,image:&mut image){
自我(状态、形象)
}
}
F的impl RenderCallback
哪里
F:FnMut(&mut图像),
{
fn渲染(&mut self,state:&mut state,image:&mut image){
self(&mut(),image)
}
}

有什么方法可以达到这种效果吗?

我认为如果你想坚持这种设计,唯一的方法就是使用opt-out。但这需要每晚。例如:

#![功能(可选内置特性)]
//为所有内容实现DummyState。。。
自动特征DummyState{}
// ... 但是选择退出()
恳求!(){}的DummyState
特征渲染回调{
fn呈现(&mut self,state:&mut state,num:u8);
}
//为实现DummyState的任何类型实现呈现回调
F的impl RenderCallback
哪里
F:FnMut(&mut状态,u8),
State:DummyState,//DummyState表示除opted out()之外的任何类型
{
fn呈现(&mut self,state:&mut state,num:u8){
self(状态,num)
}
}
//实现()的呈现回调,该回调不实现DummyState,
//所以没有重叠
F的impl RenderCallback
哪里
F:FnMut(u8),
{
fn呈现(&mut self,_state:&mut(),num:u8){
自我(num)
}
}
fn与_state(){
结构MyState{
x:u8,
};
println!(“带州…”);
让mut state=MyState{x:0};
让mut callback=| state:&mut MyState,num:u8 |{
state.x+=num;
println!(“{}”,state.x);
};
render(&mut state,1);
呈现(&mut状态,2);
render(&mut state,3);
}
fn无_状态(){
println!(“无状态…”);
让mut回调=| num:u8 |{
println!(“{}”,num);
};
render(&mut(),1);
render(&mut(),2);
render(&mut(),3);
}
fn main(){
带_状态();
没有_状态();
}

如果他们对状态管理不感兴趣,为什么不干脆
.render(| |,image |{…})
?@zrzka我猜状态是用户指定的泛型类型,所以他们必须提供一些东西。我还认为问题更多的是如何删除“不必要”的参数。