我正在尝试围绕std::<T>::from_str_radix. 根据文档,from_str_radix返回Result<T, ParseIntError>. 但
fn foo<T: num_traits::Num>() -> Result<T, std::num::ParseIntError> {
T::from_str_radix("4242", 10)
}
Run Code Online (Sandbox Code Playgroud)
不会编译:
错误:类型不匹配:预期
core::result::Result<T, core::num::ParseIntError>,发现core::result::Result<T, <T as num_traits::Num>::FromStrRadixErr>
另一方面,这
fn main() {
let x: Result<u8, std::num::ParseIntError> = foo();
println!("{:?}", x);
}
fn foo<T: num_traits::Num>() -> Result<T, <T as num_traits::Num>::FromStrRadixErr> {
T::from_str_radix("4242", 10)
}
Run Code Online (Sandbox Code Playgroud)
编译良好并打印预期结果
错误(ParseIntError {种类:溢出})
在我看来,两者的情况相同,但显然我错了。有人可以向我解释其中的差异并可能向我展示解决方案吗?