我制作了一个类似python的输入函数来获取stdin并返回一个String。它运行得很好,我得到了结果,它正在解析为所需的任何数字类型。但是,我决定将解析转移到函数上,并在它上使用泛型类型,然后我出现了一个错误。
这是代码:
fn input<T>(text: &str) -> T {
let mut input = String::new();
println!("{}", text);
std::io::stdin()
.read_line(&mut input)
.expect("Erro ao ler valor");
let input = input.trim().parse::<T>().expect("Erro ao ler valor");
return input;
}
编译错误:
let input = input.trim().parse::<T>().expect("Erro ao ler valor");
^^^^^ the trait `FromStr` is not implemented for `T`
此外,在VSCode中,显示此消息:
main.rs(9, 11): consider restricting type parameter `T`: `: std::str::FromStr`
我想我可以使用枚举来解决这个问题,但很难写下println接受的所有可能的类型,而使用条件语句似乎更糟。到目前为止,我已经研究Rust三天了,我真的不知道正确的方法
编译器告诉您要做什么:
use std::str::FromStr;
fn input<T: FromStr>(text: &str) -> T {
// ^^^^^^^^^
这限制了泛型类型T
,并表示它必须实现.parse::<T>()
工作所需的FromStr
特性(parse
函数也限制了T: FromStr
(。
进一步阅读:
- 特征作为参数