¿Hay alguna forma de devolver una referencia a una variable creada en una función?
Quiero escribir un programa que escriba un archivo en 2 pasos. Es probable que el archivo no exista antes de ejecutar el programa. El nombre del archivo es fijo.
El problema es eseOpenOptions.new().write()
puede fallar En ese caso, quiero llamar a una función personalizadatrycreate()
. La idea es crear el archivo en lugar de abrirlo y devolver un identificador. Como el nombre de archivo es fijo,trycreate()
no tiene argumentos y no puedo establecer una vida útil del valor devuelto.
¿Como puedo resolver este problema?
use std::io::Write;
use std::fs::OpenOptions;
use std::path::Path;
fn trycreate() -> &OpenOptions {
let f = OpenOptions::new().write(true).open("foo.txt");
let mut f = match f {
Ok(file) => file,
Err(_) => panic!("ERR"),
};
f
}
fn main() {
{
let f = OpenOptions::new().write(true).open(b"foo.txt");
let mut f = match f {
Ok(file) => file,
Err(_) => trycreate("foo.txt"),
};
let buf = b"test1\n";
let _ret = f.write(buf).unwrap();
}
println!("50%");
{
let f = OpenOptions::new().append(true).open("foo.txt");
let mut f = match f {
Ok(file) => file,
Err(_) => panic!("append"),
};
let buf = b"test2\n";
let _ret = f.write(buf).unwrap();
}
println!("Ok");
}