在结构中存储不可变路径的正确方法是什么?
What is the right way to store an immutable Path in a struct?
以下代码有效,但不确定它是否正确。几个问题:
- 我应该使用
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);
}
一些上下文:我正在尝试对应该知道自己路径的文件进行高级抽象。也许设计是完全错误的。
如果有帮助的话,这个问题几乎与 String
和 &str
相同。 PathBuf
是 String
,&Path
是 &str
。所以:
如果您希望结构拥有它,请存储一个 PathBuf
。如果您不知道自己想要什么,请从这里开始。
如果您只想引用路径,请存储 &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);
}
一些上下文:我正在尝试对应该知道自己路径的文件进行高级抽象。也许设计是完全错误的。
如果有帮助的话,这个问题几乎与 String
和 &str
相同。 PathBuf
是 String
,&Path
是 &str
。所以:
如果您希望结构拥有它,请存储一个 PathBuf
。如果您不知道自己想要什么,请从这里开始。
如果您只想引用路径,请存储 &Path
。根据您的操作,这可能是您想要的,但如果您不知道,它可能不正确。