Как правильно хранить неизменяемый путь в структуре?
Следующий код работает, но не уверен, что это правильный путь. Несколько вопросов:
- Должен ли я использовать
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);
}
Некоторый контекст: я пытаюсь создать абстракцию высокого уровня для файла, который должен знать свой собственный путь. Может быть, дизайн просто неправильно.
1 ответ
Решение
Этот вопрос почти такой же, как String
против &str
, если это поможет. PathBuf
является String
, &Path
является &str
, Так:
Магазин PathBuf
если вы хотите, чтобы структура владела им. Если вы не знаете, чего хотите, начните здесь.
Магазин &Path
если вы просто хотите ссылку на путь. В зависимости от того, что вы делаете, это может быть то, что вы хотите, но если вы не знаете, это, вероятно, не правильно.