将结果<Box <Struct >>强制转换为结果<< Box <dyn特性>>>

时间:2020-01-22 17:18:42

标签: rust traits

我有一个实现特征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>, _>`

Playground

0 个答案:

没有答案