Rust 使用Result::map和Box时推断类型失败

Rust 使用Result::map和Box时推断类型失败,rust,Rust,为什么这个不能编译 trait T{} fn f,u>` 找到类型“std::result::result”` =帮助:必须约束类型参数以匹配其他类型 =注:有关更多信息,请访问https://doc.rust-lang.org/book/ch10-02-traits.html#traits-作为参数 这个版本还可以: trait T{} fn f这是一个限制,我不知道它是否有一天会编译。原因是Rust不知道如何在两种结果类型之间转换,(dynt+'static)和U是完全不同的东西。如果这可

为什么这个不能编译

trait T{}
fn f,u>`
找到类型“std::result::result”`
=帮助:必须约束类型参数以匹配其他类型
=注:有关更多信息,请访问https://doc.rust-lang.org/book/ch10-02-traits.html#traits-作为参数
这个版本还可以:

trait T{}

fn f这是一个限制,我不知道它是否有一天会编译。原因是Rust不知道如何在两种
结果
类型之间转换,
(dynt+'static)
U
是完全不同的东西。如果这可以接受,您可以执行
f2().map(| x | Box::new(x)as |)

强制转换将允许编译器将
U
转换为
(dyn T+'static)
,然后再将其放入结果中,我们不需要显式显示强制转换类型,编译器将为我们执行(在大多数情况下)

trait对象可以从指向具体类型的指针获得,该类型通过强制转换实现trait(例如&xas&Foo)


请参阅本书的部分(在新书中未找到任何信息)。

这是一个限制,我不知道它是否有一天会编译。原因是Rust不知道如何在两种
结果
类型之间转换,
(dynt+'static)
U
是完全不同的东西。如果这可以接受,您可以执行
f2().map(| x | Box::new(x)as |)

强制转换将允许编译器将
U
转换为
(dyn T+'static)
,然后再将其放入结果中,我们不需要显式显示强制转换类型,编译器将为我们执行(在大多数情况下)

trait对象可以从指向具体类型的指针获得,该类型通过强制转换实现trait(例如&xas&Foo)


请参阅本书的一节(在新书中未找到任何信息)。

这可以通过对“as”的魔力的一点解释来完成。编译器是如何决定
\uuu
在这个上下文中的含义的。@MichaelAnderson希望它更清楚,不幸的是,这个问题没有太多的参考资料。谢谢你澄清这一点。我知道编译器会在一些地方进行类型推断,只是没想到它会作为X
的一部分。看起来是一个非常有用的功能。似乎很遗憾,没有更好的文档记录。这可能需要解释一下“as_”的魔力。编译器是如何决定
\uuu
在这个上下文中的含义的。@MichaelAnderson希望它更清楚,不幸的是,这个问题没有太多的参考资料。谢谢你澄清这一点。我知道编译器会在一些地方进行类型推断,只是没想到它会作为X的一部分。看起来是一个非常有用的功能。似乎很遗憾,没有更好的地方记录。