【发布时间】:2017-03-14 03:28:17
【问题描述】:
我正在尝试迭代标准输入中的字符。 Read.chars() 方法实现了这个目标,但不稳定。显而易见的替代方法是使用 Read.lines() 和 flat_map 将其转换为字符迭代器。
这似乎应该有效,但没有,导致borrowed value does not live long enough 错误。
use std::io::BufRead;
fn main() {
let stdin = std::io::stdin();
let mut lines = stdin.lock().lines();
let mut chars = lines.flat_map(|x| x.unwrap().chars());
}
Read file character-by-character in Rust 中提到了这一点,但并没有真正解释原因。
我特别困惑的是这与documentation for flat_map 中的示例有何不同,后者使用flat_map 将.chars() 应用于字符串向量。我真的不明白这应该有什么不同。我看到的主要区别是我的代码也需要调用unwrap(),但是将最后一行更改为以下内容也不起作用:
let mut chars = lines.map(|x| x.unwrap());
let mut chars = chars.flat_map(|x| x.chars());
它在第二行失败,所以问题似乎不是unwrap。
当文档中非常相似的行不起作用时,为什么最后一行不起作用?有什么办法可以让它工作吗?
【问题讨论】: