有没有一种方法可以编写如下所示的函数:
fn read_and_iter_u32_line<'a>(mut buf: String) -> Iterator<Item=u32> {
buf.truncate(0);
io::stdin().read_line(&mut buf).unwrap();
buf.split_whitespace()
.map(|s| s.parse::<u32>().unwrap())
}
最佳答案
迭代器是惰性的。这意味着它们正在操作的数据需要与迭代器本身一样存在,但是当函数返回时 buf
不再存在。如果我们将 buf
保留更长时间,它就可以正常工作。
目前编写返回复杂迭代器的函数很棘手,但这是可能的:
use std::io;
use std::iter::{Iterator, Map};
use std::str::SplitWhitespace;
fn read_and_iter_u32_line(buf: &mut String) -> Map<SplitWhitespace, fn(&str) -> u32> {
buf.truncate(0);
io::stdin().read_line(buf).unwrap();
buf.split_whitespace().map(parse)
}
fn parse(s: &str) -> u32 {
s.parse::<u32>().unwrap()
}
关于rust - 在 Rust 中读取字符串并将其解析为迭代器的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35765248/