rust - 如何修复Rust错误 “value used here after move”?

标签 rust clone ownership borrowing

这是我的Cargo.toml。

[package]
name = "test"
version = "0.1.0"
authors = ["test <test@gmail.com>"]
edition = "2018"

[dependencies]
rand = "0.8.3"
walkdir = "2.3.1"
这是我的main.rs。
use std::fs;
use std::io::Error;
use std::path::Path;
use walkdir::WalkDir;

fn main() {
    for entry in WalkDir::new(".").max_depth(1) {
        if &entry.unwrap().path().strip_prefix(".\\").unwrap().to_str().unwrap() == &"src" {
            println!("{:#?}", "Yes, it's src!!!");
        }
    }
}
此代码可以正常运行。但是,当我修改如下代码时:
use std::fs;
use std::io::Error;
use std::path::Path;
use walkdir::WalkDir;

fn main() {
    for entry in WalkDir::new(".").max_depth(1) {
        if &entry.unwrap().path().strip_prefix(".\\").unwrap().to_str().unwrap() == &"src" {
            println!("{:#?}", "Yes, it's src!!!");
        }

        if &entry.unwrap().path().strip_prefix(".\\").unwrap().to_str().unwrap() == &"target" {
            println!("{:#?}", "Yes, it's target!!!");
        }
    }
}
我收到错误“移动后在此处使用的值”,这意味着第二个&entry.unwrap()中的if正在使用移动的值。我的想法是先克隆entry,然后再克隆if。但是,上面没有unwrap方法。如何使此代码起作用?

最佳答案

Result::unwrap消耗结果对象,将条目移出Result并移回返回值。
要么解包一次并将结果对象存储在变量中(let entry = entry.unwrap();),要么使用Result::as_refResult(entry.as_ref().unwrap().path()...)内借用该对象

关于rust - 如何修复Rust错误 “value used here after move”?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66449234/

相关文章:

concurrency - Rust 中的进程隔离

performance - 为什么我的 Rust 程序比等效的 Java 程序慢?

rust - 我可以在循环的多次迭代中传递相同的可变特征对象而不添加间接寻址吗?

javascript - Jquery 为每个动态添加的选择框迭代函数

c# - .Net 深度克隆 - 最好的方法是什么?

for-loop - 如何在 vector 的元素上运行 for 循环并更改 for 循环内部和 for 循环外部的向量?

rust - 将所有权移至 std::io::Chain

rust - 为什么 rust 的 read_line 函数使用可变引用而不是返回值?

c - C 中的所有权约定

mercurial - 仅通过复制整个目录来 "branch"本地 mercurial 存储库克隆是否安全?