Sto scrivendo un programma che scrive su un file e ruota il file su cui sta scrivendo ogni tanto. Quando controllo di ruotare il file, non riesco a cambiare il file dato che è stato preso in prestito dalla mia struct. Anche se I drop
l'istanza della struct, non riesco a riacquistare la proprietà del file per rinominarlo. Ecco la mia example:"non può uscire dalla variabile perché è preso in prestito" durante la rotazione delle variabili
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
}
}
so di poter arrivare a questo lavoro spostando la creazione del file nella chiamata new
funzione FileStruct
invece di avere una variabile intermedia, file
, ma vorrei sapere perché questo metodo dove ho forzatamente cadere tutte le variabili in cui tutte le variabili che i riferimenti dovrebbero essere restituiti non funziona.
Avete bisogno di 'tmp' al di fuori del if-block? Se non lo fai, puoi assicurarti che il prestito termini prima di riassegnare il 'file'. – fjh
lo faccio. L'idea è che sto scrivendo i dati nel ciclo e il blocco if è quello di cambiare il file di output. Il blocco if è pensato per determinare se dovrei cambiare 'file'. –