Rust 如何解决;无法移出借用的内容“;由于过滤读取目录输出?

Rust 如何解决;无法移出借用的内容“;由于过滤读取目录输出?,rust,move,Rust,Move,我试图使用read\u 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::&

我试图使用
read\u 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<_>>>();

我尝试了
&
*
r\u条目
周围的各种组合,但都没有效果。发生了什么?

过滤器中的谓词只允许您借用
r\u条目
。当您调用
然后_
时,会尝试移动。相反,您可以在
匹配中使用引用,如下所示:

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(())
}
fn main()->结果{
设xs=std::fs::read_dir(“.”)?
.filter(| r|U条目|匹配r|U条目{
确定(条目)=>entry.metadata().map(|m | m.is_文件()).unwrap_或(false),
Err()=>false,
})
收集::();
println!(“{:?}”,xs);
好(())
}
选择你最喜欢的