在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?
即使我明确指定了所有类型,似乎也会发生某种隐式类型转换?
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)
......这将是更完全合格的版本.但是在那里有闭包返回类型,这是不必要的.