在结构中存储不可变路径的正确方法是什么?

What is the right way to store an immutable Path in a struct?

以下代码有效,但不确定它是否正确。几个问题:

use std::fmt;
use std::path::PathBuf;

struct Example {
    path: PathBuf,
}

impl fmt::Display for Example {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        write!(f, "{}", self.path.to_str().unwrap())
    }
}

impl Example {

    fn new(path: &PathBuf) -> Example {
        // Do something here with path.
        Example {
            path: PathBuf::from(path),
        }
    }
}

fn main() {
    let x = Example::new(&PathBuf::from("test.png"));
    println!("{}", x);
}

一些上下文:我正在尝试对应该知道自己路径的文件进行高级抽象。也许设计是完全错误的。

如果有帮助的话,这个问题几乎与 String&str 相同。 PathBufString&Path&str。所以:

如果您希望结构拥有它,请存储一个 PathBuf。如果您不知道自己想要什么,请从这里开始。

如果您只想引用路径,请存储 &Path。根据您的操作,这可能是您想要的,但如果您不知道,它可能不正确。