我正在写一个程序,该程序写入文件并旋转它现在正在写入的文件。当我检查旋转文件时,我似乎无法更改该文件,因为它是由我的结构借用的。即使我drop
结构的实例,我似乎无法重新获得该文件的所有权来重新命名它。 这里是我的example:“旋转变量时无法移出变量,因为它是借来的”
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
}
}
我知道我能得到这个通过移动文件创建到的FileStruct
的new
函数调用,而不必一个中间变量,file
工作,但我想知道为什么会这样方法,我强制删除所有变量引用应返回的所有变量不起作用。
你是否需要if-block之外的'tmp'?如果你不这样做,那么你可以在重新分配'file'前确保借用已经结束。 – fjh
我是。这个想法是我正在循环中写入数据,if块是要更改输出文件。 if块意味着我决定是否应该更改'file'。 –