小编ste*_*935的帖子

如何将 FromStrRadixErr 转换为 ParseIntError?

我正在尝试围绕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 {种类:溢出})

在我看来,两者的情况相同,但显然我错了。有人可以向我解释其中的差异并可能向我展示解决方案吗?

error-handling rust

5
推荐指数
1
解决办法
453
查看次数

标签 统计

error-handling ×1

rust ×1