我正在努力理解所有权和借用检查器。我遇到了一个问题,虽然已经“解决”了,但我认为应该有一种更加人性化的解决方法。
下面的代码会触发借用检查器错误,因为我试图将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
是一个包含 ConfigFiles
结构体的 Vec<ConfigFiles>
。
我正在遍历 filelist
,并想将 ConfigFiles 结构体中的一个字段复制到一个新的 Vec
中。
如果我将那行代码替换为
let thisfile_path = String::from(&file.filepath);
它不起作用,因为 &String
没有实现 convert 特性。
我已经找到了一种解决方法,但我认为这不是理想的方式:
let thisfile_path = String::from(&file.filepath[..]);
这是我唯一能解决这个问题的方法吗?
Clone
接口时才是如此。” “我目前没有尝试这段代码的手段” — https://play.rust-lang.org/ - Shepmasterto_owned()
不是克隆字符串吗? - Michael Dorst