我有一个实现特征MyStruct
的结构MyTrait
。
我如何映射Result<Box<MyStruct>>
以获得Result<Box<dyn MyTrait>>
而又不传递给map()
带有返回类型的显式lambda?
代码
#[derive(Debug)]
struct MyStruct;
trait MyTrait {}
impl MyTrait for MyStruct {}
#[derive(Debug)]
struct MyError;
type Result<T> = std::result::Result<T, MyError>;
fn foo(_: &mut dyn MyTrait) {}
fn main() {
let res: Result<MyStruct> = Ok(MyStruct {});
let res: Result<Box<dyn MyTrait>> = res.map(Box::new);
// let res: Result<Box<dyn MyTrait>> = res.map(|x| -> Box<dyn MyTrait> {
// Box::new(x) //too verbose
// });
foo(res.unwrap().as_mut());
}
导致编译错误
error[E0308]: mismatched types
--> src/main.rs:17:41
|
17 | let res: Result<Box<dyn MyTrait>> = res.map(Box::new);
| ^^^^^^^^^^^^^^^^^ expected trait MyTrait, found struct `MyStruct`
|
= note: expected type `std::result::Result<std::boxed::Box<dyn MyTrait>, _>`
found type `std::result::Result<std::boxed::Box<MyStruct>, _>`