【发布时间】:2016-10-28 19:48:09
【问题描述】:
由于大量编译器错误和文档浏览,我想出了这个功能。
use std::io;
use std::io::Read;
use std::str::FromStr;
use std::fmt::Debug;
fn parse_vec<T>(a: &String) -> Vec<T>
where T: FromStr, <T as FromStr>::Err: Debug {
a.split_whitespace()
.filter_map(|word| word.parse().ok())
.collect()
}
fn main() {
let mut all_input = String::new();
io::stdin().read_to_string(&mut all_input)
.expect("io::stdin().read_to_string(&mut all_input) error");
let v: Vec<i32> = parse_vec(&all_input);
println!("{}", v[0] + v[1]);
println!("{}", all_input);
}
-
<T as FromStr>::Err: Debug是什么意思?它在那里是因为编译器建议它。我不知道它是什么。 - 函数
parse_vec可以缩短吗? - 如果我更改
parse_vec以获取字符串fn parse_vec<T>(a: String) -> Vec<T>的所有权,all_input字符串的内存会在parse_vec完成后释放吗? - 有没有办法在没有用于读取输入的中间字符串的情况下做到这一点?
【问题讨论】:
标签: rust