以下代码能够工作,但不确定是否正确。有几个问题:
- 我应该使用
Path
还是PathBuf
? - 我应该使用
AsRef
吗? - 我需要使用
PathBuf::from(path)
使路径被结构体拥有吗?
- 我应该使用
Path
还是PathBuf
? - 我应该使用
AsRef
吗? - 我需要使用
PathBuf::from(path)
使路径被结构体拥有吗?
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);
}
一些背景:我试图在文件上建立一个高级抽象,它应该知道自己的路径。也许这个设计本身就有问题。
Box<Path>
是另一个选择。由于它表示不可变性,因此也值得考虑。 - David J.