首页 > 解决方案 > PathBuf::from(&some_other_pathbuf) 是否克隆了 some_other_pathbuf 的数据?

问题描述

我正在编写一个custom_rename函数,它接收 aString和对 a 的不可变引用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?根据The Rust Programming Language,Rustaceans 尽量避免克隆。

标签: rustioclone

解决方案


是的,aPathBuf拥有数据。在出现引用时拥有数据的唯一方法是克隆它。

我会把它写成

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");
}

也可以看看:


推荐阅读