我的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

这限制了可以用于实现FT(或者,在您的情况下为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"));
}

10-08 00:05