我有以下可以工作并编译的代码,但我想知道是否可以仅使用构建器模式来执行此操作,因此,在第二个函数中,我将使用 .for_each() 或 w/e,而不是 for 循环
use std::path::PathBuf;
use walkdir::{DirEntry, Error};
fn main() {
println!("Hello, world!");
match rewalk(walker()) {
Ok(v) => v.iter().for_each(|f| println!("{:?}", f.path)),
Err(_e) => (),
}
}
fn walker() -> Result<Vec<DirEntry>, Error> {
walkdir::WalkDir::new("clear")
.max_depth(1)
.into_iter()
.filter(|e| {
e.as_ref().unwrap().path().is_file() && e.as_ref().unwrap().path().extension().is_some()
})
//is it possible to continue to iterate from here
//and collect Result<Vec<MyStruct>,MyError>
.collect()
}
fn rewalk(ars: Result<Vec<DirEntry>, Error>) -> Result<Vec<MyStruct>, MyError> {
let mut ve: Vec<MyStruct> = vec![];
match ars {
Ok(e) => {
for x in e {
ve.push(MyStruct {
path: x.path().to_path_buf(),
});
}
Ok(ve)
}
Err(e) => Err(MyError::Io),
}
}
#[derive(Debug)]
enum MyError {
Io,
Fs,
}
struct MyStruct {
path: PathBuf,
}
所以基本上我在代码中注释的地方,是否可以完成我在 rewalk() 函数中所做的操作。别介意我有 2 个函数,可以是一个,但作为示例的一部分,我想将 rewalk 函数合并到 walker 函数中,并让它使用构建器模式