Piszę program, który zapisuje do pliku i obraca plik, który pisze do każdego od czasu do czasu. Kiedy sprawdzam, aby obrócić plik, nie mogę zmienić pliku, ponieważ jest zapożyczony przez moją strukturę. Nawet jeśli I drop
wystąpienie struktury, nie wydaje się, aby odzyskać własność pliku, aby zmienić nazwę. Oto mój example:"nie można przenieść ze zmiennej, ponieważ jest wypożyczona" podczas obracania zmiennych
use std::fs::File;
use std::io::{Write};
use std::mem::{drop};
pub struct FileStruct<W: Write> {
pub writer: Option<W>,
}
impl <W: Write> FileStruct<W> {
pub fn new(writer: W) -> FileStruct<W> {
FileStruct {
writer: Some(writer),
}
}
}
fn main() {
let mut file = File::create("tmp.txt").unwrap();
let mut tmp = FileStruct::new(&mut file);
loop {
if true { //will be time based if check
drop(tmp);
drop(file);
file = File::create("tmp2.txt").unwrap();
tmp = FileStruct::new(&mut file);
}
// write to file
}
}
wiem, że mogę dostać tę pracę przesuwając tworzenia plików do wywołania new
funkcyjnym FileStruct
zamiast zmiennej pośredniej, file
, ale chciałbym wiedzieć, dlaczego metoda, w której siłą odrzucam wszystkie zmienne, w których wszystkie zmienne, które mają zostać zwrócone, nie działa.
Potrzebujesz 'tmp' poza blokiem if? Jeśli nie, możesz upewnić się, że pożycza się przed ponownym przypisaniem "pliku". – fjh
Ja to robię. Chodzi o to, że piszę dane w pętli, a blok if zmienia plik wyjściowy. Blok if jest przeznaczony dla mnie do określenia, czy powinienem zmienić 'plik'. –