ファイルに書き込み、書き込み先のファイルを時々ローテーションするプログラムを書いています。ファイルのローテーションを確認すると、構造体によって借用されているため、ファイルを変更できないようです。構造体のインスタンスであってもdrop
、ファイルの所有権を取り戻して名前を変更することはできないようです。これが私の例です:
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
}
}
ファイル作成を中間変数new
の代わりに関数呼び出しに移動することでこれを機能させることができることはわかっていますが、すべての変数参照が返される必要があるすべての変数を強制的にドロップするこのメソッドの理由を知りたいです動作しません。FileStruct
file