我的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
之一-Result
相同。解决这些问题后,您的功能将起作用:
use std::str::FromStr;
fn test<T: FromStr>(text: &str) -> Result<T, T::Err> {
text.parse::<T>()
}
fn main() {
println!("{:?}", test::<u64>("2313"));
}