1
Path
參數可以立即轉換爲PathBuf
,但這似乎效率低下。必須有某種方法保持Path
,對吧?如何編寫存儲`Path`的構建器?
use std::fs::File;
use std::path::Path;
struct Foo {
a: Option<File>,
b: Option<File>,
}
struct FooBuilder<'a> {
a: Option<&'a Path>,
b: Option<&'a Path>
}
impl<'a> FooBuilder<'a> {
fn new() -> FooBuilder<'a> {
FooBuilder {
a: None,
b: None,
}
}
fn a<P: AsRef<Path>+'a>(&'a mut self, a: P) -> &mut FooBuilder<'a> {
self.a = Some(a.as_ref());
self
}
fn b<P: AsRef<Path>+'a>(&'a mut self, b: P) -> &mut FooBuilder<'a> {
self.b = Some(b.as_ref());
self
}
fn done(&self) -> Foo {
Foo {
a: match self.a {
Some(path) => Some(File::open(path).unwrap()),
None => None,
},
b: match self.b {
Some(path) => Some(File::open(path).unwrap()),
None => None,
}
}
}
}
fn main() {
let path1 = Path::new("1");
let path2 = Path::new("2");
let foo = FooBuilder::new().a(path1).b(path2).done();
}
@Shepmaster可以直接在函數'a()'和'b()'創建文件,那麼你不需要保存路徑。但是這可能不是意識形態上的正確。作爲一個變體,仍然可以將'Option'設置爲該函數的參數,但會變得冗長。 (共4檔) –
waxogi
@Shepmaster這就是我尋求幫助的原因。如果他們是正常的參考 - 沒有問題的生活,但與'路徑'你只能通過'AsRef'工作。 – waxogi