Rustコードに次のジェネリック関数があります。
fn test<T>(text: &str) -> T {
text.parse::<T>()
}
アイデアは、発信者が次のようなことをするということです
test::<u64>("2313");
しかし、コンパイルはこのメッセージで失敗します
error: the trait `core::str::FromStr` is not implemented for the type `T` [E0277]
昨日Rustを学び始めたばかりなので、これはおそらく非常に基本的な質問であり、答えを見つけることができませんでした。
エラーメッセージの状態と同様に、関数に適用するにはT
実装core::str::FromStr
する必要がありparse
ます。の型シグネチャparse
は次のとおりです。
fn parse<F>(&self) -> Result<F, F::Err> where F: FromStr
これは、を実装するものに使用できる種類F
(またはあなたの場合T
)を制限しますFromStr
。他の問題は、test
;によって返される型です。それはのものと同じである必要がありparse
、A - Result
。
これらの問題を修正すると、関数は機能します。
use std::str::FromStr;
fn test<T: FromStr>(text: &str) -> Result<T, T::Err> {
text.parse::<T>()
}
fn main() {
println!("{:?}", test::<u64>("2313"));
}
OK(2313)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加