std::<T>::from_str_radix
の周りに汎用ラッパーを構築しようとしています。ドキュメントによれば、from_str_radix
はResult<T, ParseIntError>
を返します。しかしFromStrRadixErrをParseIntErrorに変換する方法?
fn foo<T: num_traits::Num>() -> Result<T, std::num::ParseIntError> {
T::from_str_radix("4242", 10)
}
がコンパイルされません。一方
error: mismatched types: expected
core::result::Result<T, core::num::ParseIntError>
, foundcore::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)
}
は罰金コンパイルし、私の心に予想される結果
Err(ParseIntError { kind: Overflow })
を印刷します、どちらも同じ状況ですが、obviouうーん、私は間違っている。誰も私にその違いを説明し、解決策を提示することはできますか?
を、最初のコンパイルエラーは'エラーです:解決に失敗しました。宣言されていない型またはモジュール 'num_traits'の使用[E0433]' – EdoPut
'num_traits'という名前の木枠からの型を取り出しています。ただし、部分的に実装をコピーできます。詳細については、https://play.rust-lang.org/?gist=0b7a2c5790e1c344a76663cc767f8790&version=stable&backtrace=0を参照してください。 –