如何在遍历 Vector 时从 &String 复制 String?

How do I copy a String from a &String while iterating through a Vector?

我正在努力了解所有权和借用检查器。我 运行 遇到了一个我设法 'solve' 解决的问题,但我认为应该有一种更符合人体工程学的方法来解决这个问题。

以下代码会触发借用检查器,因为我正试图将 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 结构复制到一个新的 Vec

如果我用 let thisfile_path = String::from(&file.filepath); 它不起作用,因为未为 &String.

实现特征转换

我找到了解决方法,但我认为这不是理想的方法:

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

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

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

let thisfile_path = file.filepath.clone();

我现在无法尝试代码,而且我自己对 Rust 的了解也不多,但我认为 .to_owned() 是您要找的东西。克隆一个参考产生一个参考; .to_owned() returns 所需的数据类型。