我是 Rust 的新手(第一周),在访问迭代器内的变量时遇到问题。如果这是一个重复的问题,我提前道歉。我什至不知道如何明智地提出这个问题。
另外,有人可以指出我如何在不同线程中处理每个文件的正确方向吗?
let files = fs::read_dir(path).unwrap();
for file_name in files {
println!("Processing File: {}", file_name.unwrap().path().display());
// how do I pass the file name to open?
// everything I try I get a 'file_name moved due to this method call' error
let file = File::open(file_name.....).expect("Unable to open file");
}
由于您是第一次研究这个问题,我想一个分步示例可以帮助您。当然,存在更短的方法来完成等效操作(特别是,此函数非常方便,可以在一次调用中打开和读取所有内容)。
由于与底层系统有很多交互,几乎每个操作都可能失败。我决定每次都使用显式语句来显式处理错误
match
。同样,有很多方法可以处理成功/失败。好吧,我认为 Rust 编译器给了你一个非常有用的消息!
移动值的使用:
file_name
移动后此处使用的值 main.rs(11, 34):file_name
由于此方法调用而移动 main.rs(11, 24):帮助:考虑调用.as_ref()
或.as_mut()
借用类型的内容 main.rs(10, 9): 移动发生是因为file_name
has typeResult<DirEntry, std::io::Error>
,它没有实现Copy
特征 result.rs(1083, 19):Result::<T, E>::unwrap
取得接收者的所有权self
,该接收者移动file_name
只需使用 as_ref() ,文件名就会作为引用传递,而不是被移动。