如何在遍历 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.filelist
是 Vec<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 所需的数据类型。
我正在努力了解所有权和借用检查器。我 运行 遇到了一个我设法 '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.filelist
是 Vec<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 所需的数据类型。