问题描述
我正在编写一个custom_rename
函数,该函数接收一个String
和一个对PathBuf
的不变引用:
fn custom_rename(new_name: String,old_path: &PathBuf) {
let mut new_path = PathBuf::from(&old_path);
new_path.pop();
new_path.push(new_name);
std::fs::rename(old_path,new_path).expect("error");
}
PathBuf::from()
函数是否克隆old_path
的数据?根据{{3}},Rustaceans尝试避免克隆。
解决方法
是的,PathBuf
拥有数据。带有引用时,拥有数据的唯一方法是克隆数据。
我会这样写
use std::{fs,path::Path};
fn custom_rename(new_name: &str,old_path: &Path) {
let mut new_path = old_path.to_owned();
new_path.pop();
new_path.push(new_name);
fs::rename(old_path,new_path).expect("error");
}
另请参阅: