Rust如何从From :: <> :: from()推断出结果类型?

Mic*_*Yoo 0 rust

在Hyper的例子的这个片段中,有一些代码我已经用成功编译的类型注释:

.map_err(|x: std::io::Error| -> hyper::Error {
    ::std::convert::From::<std::io::Error>::from(x)
})
Run Code Online (Sandbox Code Playgroud)

类型定义From::from()似乎是fn from(T) -> Self;

当我给出的任何泛型和参数都不是类型的时候,看起来似乎是什么似乎std::io::Error -> Self返回一个hyper::Error值怎么样hyper::Error

即使我明确指定了所有类型,似乎也会发生某种隐式类型转换?

DK.*_*DK. 6

Rust中的类型信息可以向后流动.

闭包的返回类型指定为hyper::Error.因此,必须是块hyper::Error的结果,因此From::from必须是结果hyper::Error.

如果你愿意,你可以使用......

<hyper::Error as ::std::convert::From>::<std::io::Error>::from(x)
Run Code Online (Sandbox Code Playgroud)

......这将是更完全合格的版本.但是在那里有闭包返回类型,这是不必要的.