我正试着了解所有权和借钱人.我遇到了一个我设法"解决"的问题,但我认为应该有一种更符合人体工程学的方法来解决.

下面的代码使borrow 判断器跳闸,因为我试图在borrow 上下文中将file.filepath移动到thisfile_path.

for file in &self.filelist {
    let thisfile_path = String::from(file.filepath);
    let this_wd = self.notifier.add_watch(Path::new(&file.filepath), watch_mask::CLOSE_WRITE).unwrap();
    let this_watch = Watchlist {configfile: thisfile_path, watchd: this_wd};
    watches.push(this_watch);
}

&self.filelistVec<ConfigFiles>,其中ConfigFiles是struct.

我正在迭代filelist,我想将一个字段从ConfigFiles struct 复制到一个新的Vec.

如果我用

我已经找到了解决办法,但我认为这不是实现这一点的理想方式:

let thisfile_path = String::from(&file.filepath[..]);

这是我唯一能解决这个问题的方法吗?

推荐答案

std::string::String实现了clone() method,因此您可以通过以下方式以更直接的方式实现相同的目标:

let thisfile_path = file.filepath.clone();

Rust相关问答推荐

通过解引用将值移出Box(以及它被脱糖到什么地方)?

在Rust中,在实现特征`Display`时,如何获取调用方指定的格式?

防止cargo test 中的竞争条件

使用极点数据帧时,找不到枚举结果的方法lazy()

自定义结果枚举如何支持`?`/`FromResidual`?

当发送方分配给静态时,Tokio MPSC关闭通道

Rust编译器似乎被结果类型与anyhow混淆

Rust proc_macro 和 syn:解析空格

具有多个键的 HashMap

如何迭代存储在 struct 中的字符串向量而不移动它们?

需要哪些编译器优化来优化此递归调用?

try 从标准输入获取用户名和密码并删除 \r\n

方法可以被误认为是标准特性方法

为什么会出现无法移出可变引用后面的 `self.x`错误?

如何在 Rust Polars 中可靠地连接 LazyFrames

你能告诉我如何在 Rust 中使用定时器吗?

我可以在不调用 .clone() 的情况下在类型转换期间重用 struct 字段吗?

当特征函数依赖于为 Self 实现的通用标记特征时实现通用包装器

为什么 `ref` 会导致此示例*取消引用*一个字段?

这个 match 语句的默认值应该是什么,还有一种方法可以解开 Some case (chess in rust)