如何在将值推入向量后继续使用它?

How to keep using a value after pushing it into a vector?

所以我想在将值推入向量后继续使用它,但是当我将它添加到向量时它会控制变量的所有权,所以当我想再次引用它时我不能.我应该如何处理这种情况?

fn scan_recursive(dir: &Path) -> io::Result<Vec<PathBuf>> {
    let mut files = Vec::new(); // Create a mutable vector to store the files.

    for entry in fs::read_dir(dir)? {
        let entry = entry?;
        let path = entry.path();

        if path.is_file() {
            files.push(path);
        }

        if path.is_dir() { // ERROR: path is no longer valid
            files.append(&mut scan_recursive(&path)?);
        }
    }

    Ok(files)
}

问题是编译器不知道第一个if是否被执行,也无法判断path变量是否被消耗,所以它假设它一直是,并且path 的生命周期在推送到矢量后结束。

鉴于你的两个 if 是互斥的(path 是文件或目录)你可以使用 if ... else,这将让编译器推断如果path 不是一个文件,变量在 if 分支中没有被消耗,它仍然可以在 else 分支中使用。

if path.is_file() {
  files.push(path);
}
else if path.is_dir() {
  files.append(&mut scan_recursive(&path)?);
}