代码示例如下,疑问在下面的注释中写出来了,求教,感谢!
use std::{
fs::File,
io::{BufRead, Read, BufReader},
};
pub struct Rec {
reader: BufReader<File>,
}
impl Rec {
pub fn new(file: &str) -> std::io::Result<Self>{
Ok(Self {reader: File::open(file).map(BufReader::new)? })
}
}
impl Iterator for Rec {
type Item = Vec<String>;
fn next(&mut self) -> Option<Self::Item> {
let mut buf = Vec::new();
for line in self.reader.by_ref().lines().flatten() {
buf.push(line);
if buf.len() == 4 {
return Some(buf); // Some(buf) 为何这里必须要显式调用return才可以编译通过?
}
}
if !buf.is_empty() {
Some(buf)
} else {
None
}
}
}
fn main() {
let file = "demo.txt";
let recs = Rec::new(file).unwrap();
for multi in recs {
println!("{:?}",multi);
}
}
1
共 3 条评论, 1 页
评论区
写评论省略 return 的方式仅在函数的最后一个表达式可用 即使 for 是最后一个表达式,如果不 return或 break 的话,不就跳不出循环? 还有就是 for永远返回(),loop 才可以用 break name 跳出循环并返回 name return 用在 for 不是跳出循环,而是直接跳出函数返回
额,好吧
--
👇
ttyy: 因为是在循环内
因为是在循环内