Я пытаюсь использовать read_dir
для чтения содержимого каталога, а затем фильтровать только файлы:
let xs = std::fs::read_dir(".")?
.filter(|r_entry| {
r_entry.and_then(|entry| {
let m = entry.metadata()?;
Ok(m.is_file())
})
.unwrap_or(false)
})
.collect::<Result<Vec<_>>>();
Сообщение об ошибке:
error[E0507]: cannot move out of borrowed content
--> src/main.rs:6:13
|
6 | r_entry
| ^^^^^^^ cannot move out of borrowed content
Я пробовал различные комбинации &
и *
вокруг r_entry
безрезультатно. Что происходит?
Предикат в filter
позволяет вам заимствовать только r_entry
. Когда вы вызываете and_then
, это пытается сделать ход. Вместо этого вы можете использовать ссылку в match
следующим образом:
fn main() -> Result<()> {
let xs = std::fs::read_dir(".")?
.filter(|r_entry| match r_entry {
Ok(entry) => entry.metadata().map(|m| m.is_file()).unwrap_or(false),
Err(_) => false,
})
.collect::<Result<Vec<_>>>();
println!("{:?}", xs);
Ok(())
}